相关疑难解决方法(0)

扩展接口模式

.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听起来很可怕.)

我在这里特别询问使用扩展方法,以前我们有接口方法. …

c# extension-methods .net-3.5

24
推荐指数
3
解决办法
1万
查看次数

标签 统计

.net-3.5 ×1

c# ×1

extension-methods ×1