自动实现的属性在C#中的基类和派生类中是否具有相同的支持字段? 我有以下代码:
class Employee
{
public virtual string Infos { get; set; }
}
class Engineer : Employee
{
public override string Infos
{
get
{
//Employee and Engineer share the same backed field.
return base.Infos + " *";
}
}
}
在Main类中,我有以下代码:
class Program
{
static void Main(string[] args)
{
Employee employee = new Engineer { Infos = "Name : Boulkriat Brahim" };
Console.WriteLine ( employee.Infos );
}
}
编译并运行此代码将打印“Boulkriat Brahim *”。 所以base.Info等于“Boulkriat Brahim”。这意味着尽管我创建了一个类型为Engineer的对象,this.Info和Base.Info具有相同的值。 这是否意味着他们拥有相同的支持领域?
答案 0 :(得分:3)
是的,就像您手动声明属性一样。只有一个字段,所有子类都继承它。
答案 1 :(得分:1)
在您的代码中,只有一个支持字段,因为有一个自动实现的属性:Employee.Infos
。 Engineer.Infos
是普通属性,因此它没有任何支持字段。
如果您改为编写代码:
class Employee
{
public virtual string Infos { get; set; }
}
class Engineer : Employee
{
public override string Infos { get; set; }
public void M()
{
this.Infos = "Name : Boulkriat Brahim";
Console.WriteLine(base.Infos);
}
}
然后调用new Enginner().M()
会将null
传递给WriteLine()
,因为Engineer.Infos
的后备字段与Employee.Infos
不同。