从外部到达类属性

本文关键字:属性 从外部 | 更新日期: 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属性嵌套在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" };

因为您是在构造函数中初始化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;}
}