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是的,但被接受的答案也会以同样的方式失败。