如何从通用接口获取派生的原始类型?

曾经为此奋斗了一段时间,所以想看看这里的人是否知道解决方案。我有一组接口(和一个实现):

public interface IInputvalue
{
}

public interface IInputvalue<T> : IInputvalue where T : struct
{
    T Value { get; set; }
}

public class ButtonInputvalue : IInputvalue<bool>
{
    private bool m_Value;
    public bool Value
    {
        get => m_Value;
        set => m_Value = value;
    }
}

然后我有一个可编写脚本的对象类,该对象类继承并使用IInputvalue<T>的实现。

public abstract class InputTrigger : ScriptableObject
{
}

public abstract class InputTrigger<T> : InputTrigger where T : IInputvalue
{
    public abstract T Inputvalue { get; }
}
例如,

T可以是ButtonInputvalue。我想将此可编写脚本的对象序列化为另一个类(如InputTrigger),并且可以简单地对其调用.Inputvalue以获得正确的派生类型IInputvalue或直接获取原始值通过IInputvalue<T>.Value。这样做的最佳方法是什么?非常感谢您的帮助。

hitzhaotianxu 回答:如何从通用接口获取派生的原始类型?

我认为您正在尝试以错误的方式使用接口。 接口的目的是在可能完全不同的对象上抽象通用功能,而不关心实现该接口的基类。

例如: 您可以有一个汽车对象和一个电动汽车对象,它们都可以加速和制动。它们的操作方式不同,但是您只需要知道它们可以使用踏板(界面)加速和制动,而无需再次学习驾驶汽车。

为回答您的问题,我认为您可以将接口用作类型并在对象上调用方法,以防万一您需要验证它是否是实现该接口的特定类型,可以将其强制转换为该接口。

>
IInputValue<bool> myInputValue;
(ButtonInputValue) myInputValue; // This will be treated as ButtonInputValue because the class implements the IInputValue interface.
本文链接:https://www.f2er.com/3109012.html

大家都在问