gpt4 book ai didi

c# - 覆盖接口(interface)的返回类型

转载 作者:太空宇宙 更新时间:2023-11-03 15:27:30 25 4
gpt4 key购买 nike

希望这可以做到!

我有一个基础接口(interface)

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

还有一个抽象类

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

下面介绍一个继承自“Entity”的“Client”

interface Client : Entity
{

}

客户端有一个“Configuration”的子类

interface IClientConfiguration : IConfiguration
{

}

最后,我希望我的 Client 类看起来像这样

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

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

感谢您的帮助!--迈克尔

最佳答案

你可以使用 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> 时的常见做法因为该接口(interface)扩展了 IEnumerable .这两个接口(interface)都声明了一个名为 GetEnumerator 的方法但具有不同的返回类型( IEnumerator<T>IEnumerator )。

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

关于c# - 覆盖接口(interface)的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34643741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com