为什么对象初始化程序不使用该变量来访问字段或属性?

时间:2017-06-30 05:59:32

标签: c#

class Cat
{
    public int Age { get; set; }
    public string Name { get; set; }
}

Cat cat = new Cat { Age = 10, Name = "Fluffy" };

我是C#的初学者,我想问一个如上所示的例子 当我们初始化字段Age和property Name时,为什么我们不写下如下语句:

Cat cat = new Cat { cat.Age = 10, cat.Name = "Fluffy" };

另一个问题:当我们声明一个方法时,为什么变量可以直接访问属性,如果类Cat还没有执行实例化,如下所示:

static void CatAge(Cat cat) 
    {
        cat.Age = 12;
    }


class Cat
{

  public int Age
    {
        get;
        set;
    }

2 个答案:

答案 0 :(得分:5)

因为cat尚未初始化;因此您无法访问它。此外,即使你可以,也没有意义。您正在初始化该实例。无需指定您正在初始化的实例。这会引起进一步的混淆,因为那时人们可能会写下:

var firstCat = new Cat();
var secondCat = new Cat { firstCat.Age = 10 }; // ???

答案 1 :(得分:0)

Rob首先回答。至于第二,在编写代码时,Cat类包含Age属性,因此编辑器允许访问您的属性。

它将在运行时,它将尝试分配12.如果它为null将抛出异常,否则它将允许。