我想在一个类中实现以下接口:
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'。 [Assembly-CSharp] csharp(CS0738)
目前,我发现一种解决方案是这样的:
public class BasicWalkingEnemy : Entity, IAgro
{
public AgroState agroState { get { return _agroState; } }
public E1_AgroState _agroState { get; private set; }
}
但是我认为这很不雅致。 我的问题有更好的解决方案吗?
答案 0 :(得分:7)
通常情况下,您将使用显式接口实现来执行此操作,这样,仅通过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; }
}