簡體   English   中英

繼承自抽象 class 的泛型 class 類型的 C#

[英]C# type of generic class that inherits from abstract class

我正在努力尋找一種簡單的方法來獲取基於從抽象 class 繼承的通用 class 的類型。

我有這個層次結構:

public abstract class BaseItemData {}

public abstract class WearableItemData : BaseItemData {}

----
public class EquipmentItemData : WearableItemData {}

public class WeaponItemData : WearableItemData {}

----

public class Item<T> : ScriptableObject {}

public class EquipmentItem : Item<EquipmentItemData> { }

public class WeaponItem : Item<WeaponItemData> { }

有了這個,我想在編輯時獲得所有 Scriptable Objects Assets。 我正在使用 Odin Inspector 構建自定義編輯器,並希望將Item類型的所有資產添加到樹中,但由於需要傳遞給Item的泛型類型,我不能這樣做

   protected override OdinMenuTree BuildMenuTree() {
        OdinMenuTree tree = new OdinMenuTree();
    
    // THIS WORKS
        tree.AddAllAssetsAtPath("TEMPLATES/Weapons", "Assets/Scriptable/Templates", typeof(WeaponItem));
        tree.AddAllAssetsAtPath("TEMPLATES/Equipment", "Assets/Scriptable/Templates", typeof(EquipmentItem));

   // BUT I WOULD LIKE TO HAVE SOMETHING MORE LIKE THIS

        tree.AddAllAssetsAtPath("TEMPLATES", "Assets/Scriptable/Templates", typeof(Item)); // or typeof(Item<WearableItemData>)
    
        return tree;
      }

這些作品

typeof(Item<WeaponItemData>)
typeof(Item<EquipmentItemData>)
typeof(WeaponItem)
typeof(EquipmentItem)

但是這些並不像我想象的那樣(顯然抽象的 class 不起作用???)

typeof(Item<BaseItemData>)
typeof(Item<WearableItemData>)

我怎樣才能讓typeof(Item<WearableItemData>)起作用? (可能是奧丁特定的??(編輯時間?))

為所有非通用的東西制作一個 class (或留空):

public class ItemBase : ScriptableObject 
{
    /* nothing, or non-generic stuff here */
}

然后,從它繼承您現在擁有的通用項目:

public class Item<T> : ItemBase 
{
    /*...*/
}

然后,您可以使用tree.AddAllAssetsAtPath("TEMPLATES", "Assets/Scriptable/Templates", typeof(ItemBase));

暫無
暫無

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

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