繁体   English   中英

将来自相同基类的不同子类放入列表C#

[英]Put different subclasses from the same base class into a list C#

我想添加不同的子类,这些子类从相同的基类扩展到List。

这是基类:

public class InteractionRequirement {
        protected int requirementNumber;

        public int RequirementNumber{
            get{ return requirementNumber;}
            set{ requirementNumber = value;}
        }
    }

这些是子类:

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);

但是我似乎无法从子类中检索属性值,这是一个错误。

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;
}

http://ideone.com/4giIL4

作为附加说明,您可能需要将ObjectName的保护级别更改为public以便可以在适当的上下文中(在类和派生类之外)访问它。

暂无
暂无

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

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