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是基类?
答案 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来做,但这反过来会阻止编译时类型和成员验证..我不建议那样做直到你绝对要去。