[英]How to cast different types in a method of a derived class?
我有一个基类BaseCollectionInspector
,它有两个派生类: ReactionCollectionInspector
和ConditionCollectionInspector
。
基类有这个方法:
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
。
除了对assetType
和newItem
进行转换外,它们都将使用完全相同的AddItem
方法。
我正在尝试正确学习C#并且想要使用DRY原则,即使只是复制代码也很容易。 我想我可以使用一个接口,但我不确定如何设置它,因为我希望该方法只是在基类中,适应正确的子类。
我也尝试在每个派生类中添加这样的东西,但我找不到在基类方法中使用它进行强制转换的方法:
private Type itemType = typeof(BaseReaction);
先感谢您!
对我来说非常好的解决方案是:
BaseReaction
和BaseCondition
派生自的基类CollectionItem
,它具有相似的所有属性 BaseCollection
,它同时派生出ReactionCollection
和ConditionCollection
,它具有相似的所有属性 这样我可以只引用基类CollectionItem
和BaseCollection
在BaseCollectionInspector
,并设置我想成为派生督察独特的所有方法abstract
我确信这对我正在使用的内容非常具体,但重点是它是可能的,你只需要找到类似类的公共部分,并创建它的父类。
谢谢你的帮助,虽然:)
PS:我真的很喜欢C#,并且意识到PHP是多么令人困惑的工作,没有严格打字任何东西,即使我已经在它工作了20年左右:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.