希望能够做到这一点!
我有一个基本界面
interface IEntity
{
IConfiguration Configuration {get; set;}
}
一个抽象类
abstract class Entity
{
abstract IConfiguration Configuration {get; set;}
}
现在,我将介绍一个"客户"继承自"实体"
interface Client : Entity
{
}
客户的子类为"配置"
interface IClientConfiguration : IConfiguration
{
}
最后,我希望我的Client类看起来像这样
class Client : IClient
{
public IClientConfiguration Configuration {get; set;}
}
问题是,C#抱怨我没有为类Client返回IConfiguration。我可以通过声明新的公共IClientConfiguration来覆盖它...但在我走这条路之前,我想知道是否有更好的方法来构建它并保持最佳实践。
感谢您的帮助! - 迈克尔
答案 0 :(得分:0)
您可以在Client类中使用explicit interface implementation:
class Client : IClient
{
public IClientConfiguration Configuration { get; set; }
// Explicit implementation
IConfiguration IEntity.Configuration
{
get { return this.Configuration; }
set { /* what to do here? */ }
}
}
这是实施IEnumerable<T>时的常见做法,因为该接口扩展IEnumerable。这两个接口都声明了一个名为GetEnumerator
的方法,但返回类型不同(IEnumerator<T>
vs IEnumerator
)。
但是,我认为你在某个地方犯了设计错误。配置属性是get / set。这给人的印象是,您的客户端类必须能够接受任何类型的配置。与此同时,您的客户端类似乎只使用IClientConfiguration
值。混乱。
答案 1 :(得分:0)
我想您可能错过了将“IEntity”界面添加到“实体”类中。
abstract class Entity : IEntity
{
abstract IConfiguration Configuration {get; set;}
}