从外部到达类属性
本文关键字:属性 从外部 | 更新日期: 2023-09-27 18:17:17
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; }
}
}
从外部我可以像这样到达Person的名字
Departman dp = new Departman();
dp.p.PersonName;
然而,我不能像这样到达:
Departman dp = new Departman { p.PersonName };
我能做些什么来达到这两种方式
Departman dp = new Departman {p. personname};
这个语法没有意义。当你创建一个跟在{}后面的新对象时,它是一个初始化器。向属性注入一个值是很有用的,这样你就可以这样做:
new Departman {p = new Person {PersonName = "Foo Bar"}}
假设您正在寻找初始化人名,您可以这样做:
Departman dp = new Departman { p = new Person { PersonName = "Joe" } };
PersonName
属性嵌套在Departman
的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; }
}
}
这使得以下操作成为可能:
Departman dp = new Departman { PersonName = "Joe" };
因为您是在构造函数中初始化p
,所以您不需要new Person
—您只需要设置p.PersonName
,即:
Departman dp = new Departman { p = { PersonName = "Marc" } };
然而 !一个名为p
的属性是一个非常糟糕的主意——在Person
上有一个PersonName
似乎相当多余;在我看来应该是:
var dp = new Departman { Person = { Name = "Marc" } };
实际上,您甚至不需要p
/Person
属性上的set
,因为这种方法不使用它:
public class Departman {
private readonly Person person = new Person();
public Person Person { get { return person; } }
}
public class Person {
public string Name {get;set;}
}