关于C#接口和继承的问题

问题描述 投票:0回答:1

我有以下接口,我想在一个类中实现。

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

但我觉得这样做很不优雅。有没有更好的办法解决我的问题?

c# unity3d inheritance interface properties
1个回答
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; }
}
© www.soinside.com 2019 - 2024. All rights reserved.