.NET 中扩展方法的一个有趣方面是您可以将它们应用于接口(interface)。对我来说,我可以在接口(interface)附近定义功能而不定义使程序集困惑的抽象类似乎很好。
我知道抽象类并没有过时或任何东西,但是您对在代码中使用这种副作用有何感想?
例子:
public static class IUserExtensions
{
public static bool IsCurrentUser(this IUser user)
{
return (HttpContext.Current.User != null &&
HttpContext.Current.User.Identity.Name == user.ID.ToString());
}
}
public interface IUser {
int ID { get; set; }
}
最佳答案
扩展方法可以让您专注于抽象类实际上应该做什么。在抽象类中实现“实用程序”代码是一种诱惑,因为即使它可能不是逻辑继承树的一部分,实现者也会使用它。扩展方法让您可以将这些实用方法附加到接口(interface),而不会弄乱抽象基类。
编辑
具体来说,我会应用这些准则。
遗产
实用程序类
扩展方法
编辑 2
想到另一个 DO 扩展方法
请使用扩展方法为某些实现提供自然语言(内部 DSL)。这是一个愚蠢的例子。
int age = getAge();
if (age.IsDraftAge() && !age.IsLegalDrinkingAge())
{
Console.WriteLine(@"You cannot drink until your birthdate on {0}.
Join the army instead.",
age.GetYearWhenGettingDrunkIsOk());
}
关于.net - 随着扩展方法的出现,抽象类的吸引力是否降低了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/651884/