簡體   English   中英

如何找出傳遞給父級的泛型類型

[英]How to find out the generic type passed to the parent

請告訴我如何確定在 inheritance 期間傳遞給參數 generics 的類型

public abstract class BaseEntity 
{
}

public class DogEntity : BaseEntity
{
}

public interface IAnimal
{
}

public abstract class Animal<TEntity> : IAnimal
    where TEntity : BaseEntity
{
}

public class Dog : Animal<DogEntity>
{
}

我只有 Dog 實體類型,我需要得到 DogEntity

Type type = typeof(Dog);

我將不勝感激任何幫助或提示

使用反射

Type type = typeof(Dog)
    .BaseType
    .GetGenericArguments()
    .Single();

Dog to Animal 是 Inheritance 的經典案例,多態性 - 不是 generics。 就在那里,形狀/圓形/球體。 它應該是DogEntity: AnimalEntityAnimalEntity: BaseEntity 這個 inheritance 鏈真的沒有意義。

generics 的全部意義在於您可以輸入幾乎任何類型,並且仍然具有編譯時類型檢查。 您永遠不必檢查類型,編譯器會為您完成。

如果您想知道具有 90% 概率的 generics 類型,那么您沒有 generics 場景。 您很可能正在重新發明壓倒一切。 我看到人們經常傾向於 generics + 類型檢查錯誤,而普通的舊多態/覆蓋將是答案。 它可能是當今時代最常見的 XY 問題示例之一。

暫無
暫無

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

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