将来自相同基数 class 的不同子 class 放入列表 C#
Put different subclasses from the same base class into a list C#
我想添加不同的子 classes,它们从相同的基础 class 扩展到一个列表中。
所以这是基础 class:
public class InteractionRequirement {
protected int requirementNumber;
public int RequirementNumber{
get{ return requirementNumber;}
set{ requirementNumber = value;}
}
}
这些是子classes:
public class ObjectInteraction : InteractionRequirement {
protected string objectName;
--getter and setter here--
}
public class CharacterInteraction: InteractionRequirement {
protected string characterName;
--getter and setter here--
}
public class AssetInteraction: InteractionRequirement {
protected string assetName;
--getter and setter here--
}
然后我将它们添加到一个列表中:
List<InteractionRequirement> interactionRequirements = new List<InteractionRequirement>();
ObjectInteraction objectInteraction = new ObjectInteraction();
CharacterInteraction characterInteraction = new CharacterInteraction();
AssetInteraction assetInteraction = new AssetInteraction();
interactionRequirements.Add(objectInteraction);
interactionRequirements.Add(characterInteraction);
interactionRequirements.Add(assetInteraction);
但我似乎无法从子 class 中检索属性值,出现错误。
string oName = interactionRequirement[0].ObjectName;
string cName = interactionRequirement[1].CharacterName;
string aName = interactionRequirement[2].AssetName;
那是因为 interactionRequirements
集合的类型 InteractionRequirement
而不是派生类型(ObjectInteraction、CharacterIteraction 或 AssetInteraction)。
因此,您需要演员表。
string oName = ((ObjectInteraction)interactionRequirement[0]).ObjectName;
您也可以使用as
检查转换是否成功。
var objectInteraction = interactionRequirement[0] as ObjectInteraction;
if (objectInteraction != null)
{
string oName = objectInteraction.ObjectName;
}
作为附加说明,您可能需要将 ObjectName
的保护级别更改为 public
,以便您可以在适当的上下文中访问它(在 class 和派生classes)。
我想添加不同的子 classes,它们从相同的基础 class 扩展到一个列表中。
所以这是基础 class:
public class InteractionRequirement {
protected int requirementNumber;
public int RequirementNumber{
get{ return requirementNumber;}
set{ requirementNumber = value;}
}
}
这些是子classes:
public class ObjectInteraction : InteractionRequirement {
protected string objectName;
--getter and setter here--
}
public class CharacterInteraction: InteractionRequirement {
protected string characterName;
--getter and setter here--
}
public class AssetInteraction: InteractionRequirement {
protected string assetName;
--getter and setter here--
}
然后我将它们添加到一个列表中:
List<InteractionRequirement> interactionRequirements = new List<InteractionRequirement>();
ObjectInteraction objectInteraction = new ObjectInteraction();
CharacterInteraction characterInteraction = new CharacterInteraction();
AssetInteraction assetInteraction = new AssetInteraction();
interactionRequirements.Add(objectInteraction);
interactionRequirements.Add(characterInteraction);
interactionRequirements.Add(assetInteraction);
但我似乎无法从子 class 中检索属性值,出现错误。
string oName = interactionRequirement[0].ObjectName;
string cName = interactionRequirement[1].CharacterName;
string aName = interactionRequirement[2].AssetName;
那是因为 interactionRequirements
集合的类型 InteractionRequirement
而不是派生类型(ObjectInteraction、CharacterIteraction 或 AssetInteraction)。
因此,您需要演员表。
string oName = ((ObjectInteraction)interactionRequirement[0]).ObjectName;
您也可以使用as
检查转换是否成功。
var objectInteraction = interactionRequirement[0] as ObjectInteraction;
if (objectInteraction != null)
{
string oName = objectInteraction.ObjectName;
}
作为附加说明,您可能需要将 ObjectName
的保护级别更改为 public
,以便您可以在适当的上下文中访问它(在 class 和派生classes)。