将类字段发布为另一个类字段

时间:2013-10-29 13:33:52

标签: c# nested field

public class Foo
{
Bar Field{get;set;}
}

    public class Bar
    {
    public int Value{get;set};
    public int Value2{get;set;}
    }

是否可以在C#中执行类似的操作:

Foo a = new Foo();
a.Value  = 5;
a.Value2 = 8;

换句话说,是否有可能发布Bar类的字段,好像Bar是基类?

2 个答案:

答案 0 :(得分:1)

由于您的班级Bar中有Foo类型的属性,因此您有合成。您可以通过该属性访问字段,如:

Foo a = new Foo();
a.Field.Value = 1;
a.Field.Value2 = 2;

但你必须修改当前的代码,如:

public class Foo
{
    public Bar Field { get; set; } //make the property public
}

public class Bar
{
    public int Value { get; set; }
    public int Value2 { get; set; }
}

另一种选择是继承Bar中的Foo,例如:

public class Foo : Bar
{
    public int FooID { get; set; }
}

然后您可以直接访问Bar的字段:

Foo a = new Foo();
a.Value = 1;
a.Value2 = 2;

答案 1 :(得分:0)

不是直接的,但您可以向“外部”类添加属性以明确地公开它们。

public class Foo
{
    Bar Field{get;set;}

    public int Value{get { return Field.Value;} }
    public int Value2{get { return Field.Value2;} }
}

public class Bar
{
    public int Value{get;set};
    public int Value2{get;set;}
}

然而,这当然不是很方便。如果你真的想要更“自动”地拥有这样的东西,那么probalby可以用dynamic和自定义TypeDescriptors来做,但这反过来会阻止编译时类型和成员验证..我不建议那样做直到你绝对要去。