У меня есть базовый класс 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
, а другой BaseCondition
, у обоих из которых есть свойство showItem
.
Они оба будут использовать один и тот же метод AddItem
, за исключением наложения на assetType
и newItem
.
Я пытаюсь выучить C # правильно и хочу использовать принцип СУХОГО, даже если просто скопировать код. Я думаю, что я мог бы использовать Интерфейс, но я не уверен, как бы это настроить, так как я хочу, чтобы метод был только в базовом классе, адаптируясь к правильному подклассу.
Я также пытался поместить что-то подобное в каждый из производных классов, но не могу найти способ использовать это для приведения в методе базового класса:
private Type itemType = typeof(BaseReaction);
Заранее спасибо!