.Net 3.5中的新扩展允许从接口拆分功能.
例如在.Net 2.0中
public interface IHaveChildren {
string ParentType { get; }
int ParentId { get; }
List<IChild> GetChildren()
}
Run Code Online (Sandbox Code Playgroud)
可以(在3.5中)成为:
public interface IHaveChildren {
string ParentType { get; }
int ParentId { get; }
}
public static class HaveChildrenExtension {
public static List<IChild> GetChildren( this IHaveChildren ) {
//logic to get children by parent type and id
//shared for all classes implementing IHaveChildren
}
}
Run Code Online (Sandbox Code Playgroud)
在我看来,这对于许多接口来说是更好的机制.他们不再需要抽象基础来共享此代码,并且功能上代码的工作原理相同.这可以使代码更易于维护和更容易测试.
唯一的缺点是抽象基础实现可以是虚拟的,但可以解决(实例方法是否会隐藏具有相同名称的扩展方法?这会使代码混淆吗?)
没有经常使用这种模式的任何其他原因?
澄清:
是的,我看到扩展方法的趋势是到处都是它们.如果没有大量的同行评审,我会特别小心使用.Net值类型(我认为我们在字符串上唯一的一个是.SplitToDictionary()- 类似于.Split()但也采用键值分隔符)
我认为那里有一个完整的最佳实践辩论;-)
(顺便说一下:DannySmurf,你的PM听起来很可怕.)
我在这里特别询问使用扩展方法,以前我们有接口方法. …