是否可以强制类的派生类来实现接口?
我们说我有界面IImportantStuff
和课程Base
和DerivedA
,DerivedB
,DerivedC
和...
我想强制 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的类应该实现接口。
答案 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
中的所有方法/属性。