虚拟自动实现的属性支持字段

时间:2013-11-01 06:27:16

标签: c# automatic-properties

自动实现的属性在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具有相同的值。 这是否意味着他们拥有相同的支持领域?

2 个答案:

答案 0 :(得分:3)

是的,就像您手动声明属性一样。只有一个字段,所有子类都继承它。

答案 1 :(得分:1)

在您的代码中,只有一个支持字段,因为有一个自动实现的属性:Employee.InfosEngineer.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不同。