代码之家  ›  专栏  ›  技术社区  ›  Greg Olmstead

接口和基类的混合,正确的实现方法

  •  2
  • Greg Olmstead  · 技术社区  · 14 年前

    它们继承自基类,因为它们都具有诸如“Foo”和“Bar”之类的属性,而我使用基类的原因是我不必在每个派生类中手动实现所有这些属性。

    但是,我希望有一个只在派生类中的方法,而不在基类中,因为基类不知道如何“执行”该方法,所以我正在考虑为此使用一个接口。如果我把它放在基类中,我必须定义一些body来返回一个值(这将是无效的),并且始终确保重写方法没有调用基类。方法

    使用基类和接口来公开方法是正确的方法吗?它看起来很圆滑,但我想做的每一件事似乎都是错的。。。

    编辑 :感谢所有人提出了你出色的抽象建议,但这让设计师很失望。如果抽象不是一个可选择的选项,你会怎么做?

    5 回复  |  直到 14 年前
        1
  •  5
  •   Justin Ethier    14 年前

    abstract class A
    {
       public abstract void B();
    }
    

    当然,这也会迫使基类是抽象的,但听起来这对您来说很好。

    看到了吗 Abstract methods 在MSDN上。

    abstract 由于设计器问题,您不能选择,您可以将方法定义为基类的一部分,并让它抛出 NotImplementedException

    void DerivMethod()
    {
        // Must be implemented by derived class
        throw new NotImplementedException();
    }
    

    否则,使用 interface

        2
  •  2
  •   sgriffinusa    14 年前

    您应该使基类成为抽象类。然后基类可以通过将方法标记为抽象来实现接口。

    http://msdn.microsoft.com/en-us/library/aa664435(VS.71).aspx

        3
  •  1
  •   Paul Kearney - pk    14 年前

        4
  •  1
  •   Scott P    14 年前

    我同意其他人的观点,但是让用户控件抽象化对设计者来说有一些问题。设计器通常不会显示抽象用户控件。

        5
  •  0
  •   riwalk    14 年前

    在基类中声明函数签名并使用“abstract”修饰符。