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 类的字段?
由于您Bar
的 class 中有 type 属性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
直接访问 's 字段,例如:
Foo a = new Foo();
a.Value = 1;
a.Value2 = 2;
不是直接的,但您可以将属性添加到“外部”类以显式地公开它们。
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;}
}
但是,这当然不是很方便。如果你真的想要更“自动”地拥有这样的东西,你可能可以使用dynamic
自定义 TypeDescriptors 来完成它,但这反过来会阻止编译时类型和成员验证。我不建议这样做,除非你绝对必须这样做。