重写接口';s返回类型

本文关键字:返回类型 接口 重写 | 更新日期: 2023-09-27 18:29:10

希望能做到这一点!

我有一个基本接口

interface IEntity
{
    IConfiguration Configuration {get; set;}
}

和一个抽象类

abstract class Entity
{
    abstract IConfiguration Configuration {get; set;}
}

现在我将介绍一个继承自"实体"的"客户端"

interface Client : Entity
{
}

客户端有一个子类"配置"

interface IClientConfiguration : IConfiguration
{
}

最后,我希望我的客户端类看起来像这个

class Client : IClient
{
    public IClientConfiguration Configuration {get; set;}
}

问题是,C#抱怨我没有返回类Client的IConfiguration。我可以通过声明新的公共IClientConfiguration来覆盖它。。。但在我走这条路之前,我想知道是否有更好的方法来构建并保持最佳实践。

谢谢你的帮助!--Michael

重写接口';s返回类型

您可以在客户端类中使用显式接口实现:

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>IEnumerator)。

然而,我认为你在某个地方犯了一个设计错误。配置属性为get/set。这给人的印象是,客户端类必须能够接受任何类型的配置。同时,您的Client类似乎只能使用IClientConfiguration值。令人困惑

我想您可能错过了将"IEntity"接口添加到"Entity"类中。

abstract class Entity : IEntity
{
    abstract IConfiguration Configuration {get; set;}
}