Concrete class which inherites a generic interface
我想要一个通用接口,它有一个用作派生类的ID属性的属性。
我写的界面如下:
1 2 3 4 | interface IEntity<T> { T Id { get; set; } } |
派生类可以使用它,如下所示:
1 2 3 4 5 6 7 | public class Employee : IEntity<int> { // don't need to define Id property // public int Id { get; set; } } public class Document : IEntity<string> { ... } |
不幸的是,编译器会处理此错误:
'Employee' does not implement interface member 'IEntity.Id'
我做错了什么?谢谢。
编辑:虽然接受的答案解决了这个问题,@dbc注释帮助我实现了我的目标,但是如果我将
在接口中,必须实现所有方法!
属性只不过是方法,在接口中定义时必须实现这些方法:
您混淆了继承和接口实现。
当一个接口继承另一个接口时,成员将被继承,并且您不会重复它们:
1 2 3 4 5 6 7 8 9 | interface IEntity<T> { T Id { get; set; } // necessary code for 'get' and 'set' not present (yet) } interface IEmployee : IEntity<int> { // don't need to repeat Id property // it is inherited } |
类似地,当一个类继承另一个类时:
1 2 3 4 5 6 7 8 9 | class Entity<T> { public T Id { get; set; } // automatic code for 'get' and 'set' exists here } class Employee : Entity<int> { // don't need to repeat Id property // it is inherited } |
如果要确保只实例化派生类,则可以将基类设置为
但当类(或结构)实现和接口时,接口的每个成员都必须以某种方式实现。通常由该类或结构的公共成员执行。(该公共成员可以从基类继承!)或者,偶尔通过显式接口实现。
接口没有主体,只有签名。例如,
您需要为每个类实现接口-正如前面提到的那样:
1 2 3 4 5 6 7 8 9 | interface IEntity<T> { T Id { get; set; } } public class Employee : IEntity<int> { public int Id { get; set; } } |