【问题标题】:Interface for derived class派生类的接口
【发布时间】:2015-01-19 06:23:47
【问题描述】:

是否可以强制类的派生类实现接口?

假设我有接口IImportantStuff 和类BaseDerivedADerivedBDerivedC 和...

我想强制 DerivedADerivedBDerivedC 以及将来继承 Base 类的所有其他类(我可能设计的类未来)来实施IImportantStuff

已编辑:

作为另一个问题,每个继承类(从基类派生)都与某个实体(例如客户、店主、人员)一起使用,我想强制派生类声明它们的实体,以防止我团队中的程序员创建一个从 Base 继承的类而不定义实体。我想通过泛型和接口来做到这一点,以便在基本表单上他们可以访问实体的属性和成员。

例如

class Base<T> { public T Entity {get; set;} }

class MidClass : Base {}

class Customer
{
    public string CustomerName {get; set;}
}

class Shopkeeper
{
    public int ShopkeeperID {get; set;}
}

class Shop1 : Base<ShopKeeper>
{
    //1. Force the programmer to implement ShopkeeperID
    //2. Be able to access the properties of Shopkeeper
    void MyMethod()
    {
        var skid = this.Entity.ID;
    }
}

class Shop2 : Base<Customer>
{
    void MyMethod()
    {
        var skid = this.Entity.CustomerName;
    }
}

我希望 Shop1Shop2 继承 Base 类,而不是直接继承接口,因为我的合作程序员可能会忘记在他们的类上从 Interface 继承。所以我想对 MidClass 进行强制,它们从 MidClass 继承的类应该实现接口。

【问题讨论】:

标签: c# oop generics inheritance interface


【解决方案1】:

一种方法是将 Base 类声明为抽象类,并将方法和属性 IImportantStuff 抽象化:

public interface IImportantStuff
{
    void Action();
}

public abstract class Base: IImportantStuff
{
    public abstract void Action();
}

【讨论】:

    【解决方案2】:

    只要您的Base 类实现IImportantStuff,所有派生类也将实现它。

    如果您希望派生方法提供实现,您需要将Base 类抽象化并标记来自该接口abstract 的所有方法/属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      • 2017-11-13
      • 2011-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多