繁体   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