簡體   English   中英

如何從泛型接口獲取派生的原始類型?

[英]How can I get the derived primitive type from a generic interface?

一直在為此苦苦掙扎,所以想看看這里是否有人知道解決方案。 我有一組接口(和一個實現):

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

然后我有一個可編寫腳本的 object class 繼承並使用IInputValue<T>的實現。

public abstract class InputTrigger : ScriptableObject
{
}

public abstract class InputTrigger<T> : InputTrigger where T : IInputValue
{
    public abstract T InputValue { get; }
}

例如, T可以是ButtonInputValue 我想在另一個 class (作為InputTrigger )中序列化這個可編寫腳本的 object 並且只需能夠在其上調用.InputValue以獲得正確的派生類型IInputValue或直接通過IInputValue<T>.Value獲得原始值。 go 關於這樣做的最佳方法是什么? 任何幫助深表感謝。

我認為您正在嘗試以錯誤的方式使用接口。 接口的目的是在可能完全不同的對象上抽象通用功能,而不關心實現接口的基本 class。

例如:您可以擁有汽車object 和電動汽車對象,它們可以加速和制動。 他們以不同的方式這樣做,但您只需要知道他們可以使用踏板(界面)加速和制動,而無需您再次學習駕駛汽車。

要回答您的問題,我認為您可以將接口用作類型並調用 object 上的方法,如果您需要驗證它是實現該接口的特定類型,您可以將其轉換為它。

IInputValue<bool> myInputValue;
(ButtonInputValue) myInputValue; // This will be treated as ButtonInputValue because the class implements the IInputValue interface.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM