c# - C#接口和继承的问题
问题描述
我想在一个类中实现以下接口:
public interface IAgro {
AgroState agroState { get; }
}
问题是,我希望我的属性实现一个从 AgroState 继承的不同类,而不是使用接口在类中实现 AgroState
public class E1_AgroState : AgroState
{
...
}
public class BasicWalkingEnemy : Entity, IAgro
{
public E1_AgroState agroState { get; }
}
例如,这是我在 Swift 中使用协议做的事情,但是 C# 编译器抱怨
“BasicWalkingEnemy”没有实现接口成员“IAgro.agroState”。“BasicWalkingEnemy.agroState”无法实现“IAgro.agroState”,因为它没有匹配的返回类型“AgroState”。[汇编-CSharp]csharp(CS0738)
现在我发现的一种解决方案是:
public class BasicWalkingEnemy : Entity, IAgro
{
public AgroState agroState { get { return _agroState; } }
public E1_AgroState _agroState { get; private set; }
}
但我认为这是非常不雅的。我的问题有更好的解决方案吗?
解决方案
通常,您这样做的方式是使用显式接口实现,这样任何只知道您的对象 via 的人IAgro
都会看到AgroState
,但任何知道它正在使用的代码BasicWalkingEnemy
都会得到E1_Agrostate
:
// Note: property names changed to comply with .NET naming conventions
public class BasicWalkingEnemy : Entity, IAgro
{
// Explicit interface implementation
AgroState IAgro.AgroState => AgroState;
// Regular property
public E1_AgroState AgroState { get; private set; }
}
推荐阅读
- c# - 使用 JObject 检索 JSON 值并附加更多数据
- python - 为什么第一次通话后'ana'没有被全部替换?
- r - sparklyr - 包“rsparkling”的错误:找不到函数“as_h2o_frame”并且无法从包中加载任何函数
- google-chrome - 无法访问此站点。连接被重置
- wordpress - 联系表格 7 (CF7) 电子邮件模板数据存储?
- mips - mips - 数组值打印,为什么会出现这个问题?
- html - 如何在我的滑块文本上添加过渡或淡入效果
- android - 输入类型=“时间”和输入类型=“日期”不起作用颤振webview
- html - 被调用的对象与 Excel VBA 中的客户端断开连接 - Webscraping
- c# - CQRS 命令/查询装饰器