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

外部からはこんな感じで Person name にたどり着けます

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

ただし、次のように到達できません。

Departman dp = new Departman { p.PersonName };

双方向の PersonName に到達するにはどうすればよいですか。

4

3 に答える 3

3

Departman dp = new Departman { p.PersonName };

この構文には意味がありません。{ } を付けて新しいオブジェクトを作成すると、それは初期化子になります。これは、次のようにプロパティに値を注入するのに役立ちます。

new Departman { p = new Person { 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は本当に悪い考えです - そしてPersonNameonを持つことPersonはかなり冗長に思えます。あるべきIMO:

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

実際、このアプローチでは/プロパティを使用しないため、 setonプロパティも必要ありません。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 に答える