我有以下接口,我想在一个类中实现。
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'不能实现'IA格罗.agroState',因为它没有与'AgroState'匹配的返回类型。[Assembly-CSharp]csharp(CS0738)
目前我找到的一个解决办法是这样做。
public class BasicWalkingEnemy : Entity, IAgro
{
public AgroState agroState { get { return _agroState; } }
public E1_AgroState _agroState { get; private set; }
}
但我觉得这样做很不优雅。有没有更好的办法解决我的问题?
通常情况下,你会用以下方法来实现这个功能 显式接口实现 这样,任何一个只知道你的对象的人通过 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; }
}