【发布时间】:2019-01-05 18:42:23
【问题描述】:
我想要一个通用接口,它的属性用作派生类的 Id 属性。
我写的界面如下:
interface IEntity<T>
{
T Id { get; set; }
}
派生类可以像下面这样使用它:
public class Employee : IEntity<int>
{
// don't need to define Id property
// public int Id { get; set; }
}
public class Document : IEntity<string> { ... }
不幸的是,编译器会提示这个错误:
'Employee' 没有实现接口成员'IEntity.Id'
我做错了什么?谢谢。
编辑:
虽然接受的答案解决了问题,但@dbc cmets 帮助我实现了我的目标,如果我将interface IEntity 更改为abstract class IEntity,则不需要在派生类中实现 Id 属性。
【问题讨论】:
-
你必须在
Employee : IEntity<int>中实现int Id。接口是向其他人保证Employee具有Id属性的合约。你必须实现它。 -
不是有不需要实现那个Id的方法吗???我创建了
IEntity来减少每个实体类中的编码 Id 属性 -
在这种情况下,您需要一个抽象基类
Entity,它通过定义合同中的 Id 属性来实现接口。 Employee 类可以派生自该基类 -
抽象类的问题是,你只能从一个类继承。