BC.*_*BC. 8 .net extension-methods abstract-class
.NET中扩展方法的一个有趣方面是您可以将它们应用于接口.对我来说,似乎很好,我可以在接口附近定义功能,而无需定义使程序集混乱的抽象类.
我知道抽象类不是过时的或者任何东西,但是你如何在代码中使用这种副作用?
例:
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; }
}
Run Code Online (Sandbox Code Playgroud)
您可以使用哪些扩展方法来专注于实际应该执行的抽象类.在抽象类中实现"实用程序"代码是一种诱惑,因为它将被实现者使用,即使它可能不是逻辑继承树的一部分.扩展方法允许您将这些实用程序方法附加到接口,而不会使您的抽象基类混乱.
编辑
具体来说,我会应用这些指南.
遗产
实用类
扩展方法
编辑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());
}
Run Code Online (Sandbox Code Playgroud)