从外面到达类属性

时间:2013-06-07 10:04:56

标签: c# oop

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。

3 个答案:

答案 0 :(得分:3)

  

Departman dp = new Departman {p.PersonName};

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

新的Departman {p = new Person {PersonName =“Foo Bar”}}

答案 1 :(得分:2)

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

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

PersonName属性嵌套在Departman的{​​{1}}对象中,因此您还需要嵌套初始值设定项。您也可以直接公开Person,如下所示:

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; }
    }
}

答案 2 :(得分:0)

由于您要在构造函数中初始化p,因此您不需要new Person - 您只需要设置p.PersonName,即:{/ p>

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

然而!一个名为p的属性是一个非常糟糕的主意 - 在PersonNamePerson似乎相当多余; IMO应该是:

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

实际上,您甚至不需要set / p属性Person,因为此方法不使用它:

public class Departman {
    private readonly Person person = new Person();
    public Person Person { get { return person; } }
}
public class Person {
    public string Name {get;set;}
}