C#接口和继承问题

时间:2020-06-05 06:28:28

标签: c# unity3d inheritance interface properties

我想在一个类中实现以下接口:

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; }
}

但是我认为这很不雅致。 我的问题有更好的解决方案吗?

1 个答案:

答案 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; }
}