[英]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.