C# 创建不同类型对象的列表

C# 创建不同类型对象的列表,c#,inheritance,interface,polymorphism,C#,Inheritance,Interface,Polymorphism,我是编程的初学者。 我想制作一个可以容纳不同类型对象的列表 如果我创建了一个类型列表HeroClass,我将无法访问对象类型Batman或Robin 如何做到这一点 另一个问题:正如你所看到的,蝙蝠侠类和罗宾类具有相同的属性(3/4),让“罗宾”从“蝙蝠侠”类继承会更好吗?这些属性完全相同(多态性没有任何意义),如果类具有完全相同的属性,这是一种代码味道吗 非常感谢 第一期: 如果创建类型为“HeroClass”的列表,则无法访问对象类型为“蝙蝠侠”或“Robin”的特定属性 可以通过强制转换对

我是编程的初学者。 我想制作一个可以容纳不同类型对象的列表

如果我创建了一个类型列表
HeroClass
,我将无法访问对象类型
Batman
Robin

如何做到这一点

另一个问题:正如你所看到的,蝙蝠侠类和罗宾类具有相同的属性(3/4),让“罗宾”从“蝙蝠侠”类继承会更好吗?这些属性完全相同(多态性没有任何意义),如果类具有完全相同的属性,这是一种代码味道吗


非常感谢

第一期:

如果创建类型为“HeroClass”的列表,则无法访问对象类型为“蝙蝠侠”或“Robin”的特定属性

可以通过强制转换对象来访问特定属性,例如:

class HeroClass
{
  skill1
  skill2
}

class Batman : HeroClass
{
  skill3
  skill4
}

class Robin : HeroClass
{
  skill3
  skill4
  skill5
} 

链接现场演示第一期:

如果创建类型为“HeroClass”的列表,则无法访问对象类型为“蝙蝠侠”或“Robin”的特定属性

可以通过强制转换对象来访问特定属性,例如:

class HeroClass
{
  skill1
  skill2
}

class Batman : HeroClass
{
  skill3
  skill4
}

class Robin : HeroClass
{
  skill3
  skill4
  skill5
} 

Link live demo

您将相同的属性放入HeroClass基类,如果不想这样做,您可以将您的batmanHero对象强制转换为
((蝙蝠侠)batmanHero)。MySuperpower
要访问属性,请将相同的属性放入HeroClass基类,如果你不想这样做,你可以将你的蝙蝠侠对象投射到
((蝙蝠侠)蝙蝠侠)。MySuperpower
访问道具这是否回答了你的问题@你能给我一个你第二个建议的代码示例吗?谢谢你
skill1
skill2
。。是属性还是方法?skill1,skill2是属性thx!经过一些研究,这是一个很好的解决方案在我的情况下(铸造对象不是一个选项)这是否回答了你的问题@你能给我一个你第二个建议的代码示例吗?谢谢你
skill1
skill2
。。是属性还是方法?skill1,skill2是属性thx!经过一些研究,对我来说这是一个很好的解决方案(铸造对象不是一个选项)
    interface IHero
    {
        string skill1 { get; set; }
        string skill2 { get; set; }
    }

    interface IHero1234: IHero
    {
        string skill3 { get; set; }
        string skill4 { get; set; }
    }

    interface IHero12345: IHero1234
    {
        string skill5 { get; set; }
    }

    class BaseHero : IHero
    {
        public string skill1 { get; set; }
        public string skill2 { get; set; }
    }

    class Batman : IHero1234
    {
        public string skill1 { get; set; }
        public string skill2 { get; set; }
        public string skill3 { get; set; }
        public string skill4 { get; set; }
    }

    class Robin : IHero12345
    {
        public string skill1 { get; set; }
        public string skill2 { get; set; }
        public string skill3 { get; set; }
        public string skill4 { get; set; }
        public string skill5 { get; set; }
    }