4

我有以下Person课程

class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string FullName
    {
        get { return FirstName + " " + LastName; }
    }
    public IEnumerable<Person> Children { get; set; }
}

我可以像这样初始化它:

Person p = new Person() { FirstName = "John", LastName = "Doe" };

但是是否可以Person在对象初始化程序中引用另一个属性,所以我可以做这样的事情?

Person p = new Person()
{
    FirstName = "John",
    LastName  = "Doe",
    Children  = GetChildrenByFullName(FullName);
};

编辑

就问题而言,引用的属性不必根据其他属性计算,但可以在构造函数中设置其值。

谢谢

4

3 回答 3

4

你不能这样做:

void Foo()
{ 
  String FullName = "";

  Person p = new Person()
  {
    FirstName = "John",
    LastName  = "Doe",
    Children  = GetChildrenByFullName(FullName); // is this p.FullName 
                                                 // or local variable FullName?
  };
}
于 2012-08-08T07:35:16.340 回答
-2

不。当在对象初始化器中时,您不在类的实例中。换句话说,您只能访问可以设置的公开的公开属性。

明确地:

class Person
{
    public readonly string CannotBeAccessed;
    public  string CannotBeAccessed2 {get;}
    public void CannotBeAccessed3() { }

    public string CanBeAccessed;
    public string CanBeAccessed2 { set; }
} 
于 2012-08-08T07:42:44.247 回答
-2

我认为您可以通过使用私有局部变量支持您的属性来解决您的问题。例如

class Person {
    private string m_FirstName = string.Empty;
    private string m_LastName = string.Empty;

    public string FirstName {
        get { return m_FirstName; }
        set { m_FirstName = value; }
    }

    public string LastName {
        get { return m_LastName; }
        set { m_LastName = value;}
    }

    public string FullName {
         get { return m_FirstName + " " + m_LastName; }
    }

    public IEnumerable<Person> Children { get; set; }
}

假设对象初始化程序按照您在初始化代码中指定的顺序设置属性(并且应该),则局部变量应该是可访问的(在内部由 FullName 只读属性)。

于 2012-08-08T14:13:26.340 回答