1
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 类的字段?

4

2 回答 2

1

由于您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;
于 2013-10-29T13:37:45.477 回答
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;}
}

但是,这当然不是很方便。如果你真的想要更“自动”地拥有这样的东西,你可能可以使用dynamic自定义 TypeDescriptors 来完成它,但这反过来会阻止编译时类型和成员验证。我不建议这样做,除非你绝对必须这样做。

于 2013-10-29T13:35:57.150 回答