C# 我无法访问基类的属性?

C# 我无法访问基类的属性?,c#,C#,我这里有一个简单的课程 class Leader : Inhabitants { public int ProducedWorth { get; set; } public Leader(string name, int age, string profession, int producedWorth) { InhabitantID = InhabitantCount; Name = name; Age = age;

我这里有一个简单的课程

class Leader : Inhabitants
{

    public int ProducedWorth { get; set; }
    public Leader(string name, int age, string profession, int producedWorth)
    {
        InhabitantID = InhabitantCount;
        Name = name;
        Age = age;
        Profession = profession;
        ProducedWorth = producedWorth;
    }
    public int GetProducedWorth()
    {
        return ProducedWorth;
    }
}
它继承自一个居住类

 class Inhabitants
{
    static protected int InhabitantCount;
    public Inhabitants()
    {
        InhabitantCount++;
    }
    public int InhabitantID { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
    public string Profession { get; set; }
}
现在,当我创建该类的新实例时,它似乎工作得非常好,但是当我尝试访问仅在基类上的producedWorth属性时,我得到一个错误,继承的类没有该属性

var leadA = new Leader("Julien", 33, "Stone pit overseer", 6540)
//leadA.Name is accessible
//leadA.producedWorth is not accessible

在您正在执行的代码中,您正在创建一个不具有ProducedWorth属性的类型居民列表。如果您希望能够以这种方式访问该属性,则需要将该属性添加到Inmobiles类。

该列表是一个居民列表,您只能访问居民的属性,原因是编译器不知道列表中的实际对象是Leader类型,尽管您可以通过强制转换到Leader来告诉他:

((Leader)leadA).ProducedWorth

上面的行应该编译。

通用列表是协变的,这就是为什么允许您将
Leader
添加到
居民列表中的原因

隐式转换是允许的,您只需不使用
var
。这样做:

foreach(Leader ldr in leaders)
{
   // ....
}

因为它是
ProducedWorth
P
是大写)。简单的打字:)
Leader
居民的列表,而不是
Leader
。如果要访问
Leader
属性,列表应为
Leader
s@S.Akbari我不认为这是问题所在,看看图片:)@CamiloTerevinto它可能。我根据这一行判断,
leadA.producedWorth不可访问
哪个
leadA
Leader
的一个新实例。可能重复“您需要将该属性添加到居民类”不,您不需要,您可以转换为Leader…“列表是居民列表”这就是问题所在,谢谢!为了清楚起见,此语法不会从该列表中筛选引线,而是强制转换每个项。因此,如果碰巧有一个普通居民,这将失败there@HansKesting是的,但被接受的答案也会以同样的方式失败。