派生类的接口

时间:2015-01-19 06:23:47

标签: c# oop generics inheritance interface

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

我们说我有界面IImportantStuff和课程BaseDerivedADerivedBDerivedC和...

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

Editted:

作为另一个问题,每个继承的类(从Base类派生)与某个实体(比如Customer,Shopkeeper,Personnel)一起使用,我想强制派生类声明它们的实体,以防止我的团队中的程序员创建一个class继承自Base而不定义实体。我想通过泛型和接口来做到这一点,以便在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;
    }
}

我希望 Shop1 Shop2 继承Base类,而不是直接继承接口,因为我的共同编程人员可能忘记从他们的类继承Interface。所以我想对MidClass强制执行它们,继承自MidClass的类应该实现接口。

2 个答案:

答案 0 :(得分:3)

一种方法是将Base类声明为abstract并使方法和属性IImportantStuff absract:

public interface IImportantStuff
{
    void Action();
}

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

答案 1 :(得分:3)

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

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