2
public class Departman
{    
    Person _p = new Person();

    public Person p
    {
        get { return _p; }
        set { _p = value; }
    }    
}

public class Person
{
    private string _PersonName;

    public string PersonName
    {
        get { return _PersonName; }
        set { _PersonName = value; }
    }
}

从外面我可以得到这样的人名

Departman dp = new Departman();
dp.p.PersonName;

但是,我无法做到这样:

Departman dp = new Departman { p.PersonName };

我该怎么做才能达到双向 PersonName。

4

3 回答 3

3

部门 dp = 新部门 { p.PersonName };

这种语法没有意义。当您创建一个后跟 { } 的新对象时,它是一个初始化程序。这对于向属性注入值很有用,因此您可以这样做:

新部门 { p = 新人 { PersonName = "Foo Bar" } }

于 2013-06-07T10:09:40.830 回答
2

假设您要初始化人名,您可以这样做:

Departman dp = new Departman { p = new Person { PersonName = "Joe" } };

PersonName属性嵌套在DepartmanPerson对象中,因此您还需要嵌套初始化程序。你也可以PersonName直接暴露,像这样:

public class Departman {
    Person _p = new Person();
    public Person p {
        get { return _p; }
        set { _p = value; }
    }
    public string PersonName {
        get { return _p.PersonName; }
        set { _p = value.PersonName; }
    }
}

这使得以下成为可能:

Departman dp = new Departman { PersonName = "Joe" };
于 2013-06-07T10:08:59.047 回答
0

因为您p在构造函数中进行初始化,所以不需要new Person- 您只需要设置p.PersonName,这将是:

Departman dp = new Departman { p = { PersonName = "Marc" } };

然而!一个名为的属性p是一个非常糟糕的主意——在 aPersonName上加上 aPerson似乎是多余的;国际海事组织应该是:

var dp = new Departman { Person = { Name = "Marc" } };

实际上,您甚至不需要/属性set,因为这种方法不使用它:pPerson

public class Departman {
    private readonly Person person = new Person();
    public Person Person { get { return person; } }
}
public class Person {
    public string Name {get;set;}
}
于 2013-06-07T10:11:17.657 回答