代码之家  ›  专栏  ›  技术社区  ›  JSBÕ±Õ¸Õ£Õ¹

C:需要实现两个接口的参数的函数的首选模式[关闭]

  •  9
  • JSBÕ±Õ¸Õ£Õ¹  · 技术社区  · 14 年前

    对我的职能的争论 f() 必须实现通过继承彼此不相关的两个不同接口, IFoo IBar . 我知道有两种不同的方法。第一个是声明一个空接口,该接口继承自以下两个:

    public interface IFooBar : IFoo, IBar
    {
        // nothing to see here
    }
    
    public int f(IFooBar arg)
    {
        // etc.
    }
    

    当然,这需要类声明自己是实现的 IFooBar 而不是 IFOO 伊巴尔 分别地。

    第二种方法是 F-() 具有约束的泛型:

    public int f<T>(T arg) where T : IFoo, IBar
    {
        // etc.
    }
    

    你更喜欢哪一种,为什么?每种方法都有不明显的优点或缺点吗?

    2 回复  |  直到 14 年前
        1
  •  5
  •   Reed Copsey    14 年前

    第二种选择更加灵活。通过引入一个新接口,您将强制类实现第三个接口,这只有在类具有对库(定义接口的库)的引用时才可能实现。

    通过使用泛型约束,类只需要引用包含 IFoo IBar 而不是 IFooBar .

        2
  •  1
  •   ANeves    14 年前

    创建超级接口的第一种方法吸引了oo代码,因为它允许将类表示为 组合的 接口并与之交互。

    既然需要这样的表达,为什么不把它正式化呢? 打结 让它成为一个超级界面 文件化的 以备日后维修之用。IMHO