繁体   English   中英

如何在派生类的方法中转换不同的类型?

[英]How to cast different types in a method of a derived class?

我有一个基类BaseCollectionInspector ,它有两个派生类: ReactionCollectionInspectorConditionCollectionInspector

基类有这个方法:

protected override void AddItem(object obj) {
    AssetInfo assetInfo = (AssetInfo) obj;
    string assetName = Path.GetFileNameWithoutExtension(assetInfo.assetPath);
    var assetType = Type.GetType(typeof(BaseReaction).Namespace + "." + assetName + ", Assembly-CSharp");
    var newItem = (BaseReaction) collection.gameObject.AddComponent(assetType);
    newItem.showItem = false; // Hide script in inspector
    int index = collectionList.serializedProperty.arraySize++;

    collectionList.serializedProperty.GetArrayElementAtIndex(index).objectReferenceValue = newItem;
    serializedObject.ApplyModifiedProperties();
}

两个派生类型之间的区别在于,一个包含BaseReaction列表,另一个包含另一个具有showItem属性的BaseCondition

除了对assetTypenewItem进行转换外,它们都将使用完全相同的AddItem方法。

我正在尝试正确学习C#并且想要使用DRY原则,即使只是复制代码也很容易。 我想我可以使用一个接口,但我不确定如何设置它,因为我希望该方法只是在基类中,适应正确的子类。

我也尝试在每个派生类中添加这样的东西,但我找不到在基类方法中使用它进行强制转换的方法:

private Type itemType = typeof(BaseReaction);

先感谢您!

对我来说非常好的解决方案是:

  • 创建BaseReactionBaseCondition派生自的基类CollectionItem ,它具有相似的所有属性
  • 创建一个基类BaseCollection ,它同时派生出ReactionCollectionConditionCollection ,它具有相似的所有属性

这样我可以只引用基类CollectionItemBaseCollectionBaseCollectionInspector ,并设置我想成为派生督察独特的所有方法abstract

我确信这对我正在使用的内容非常具体,但重点是它是可能的,你只需要找到类似类的公共部分,并创建它的父类。

谢谢你的帮助,虽然:)

PS:我真的很喜欢C#,并且意识到PHP是多么令人困惑的工作,没有严格打字任何东西,即使我已经在它工作了20年左右:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM