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 が Base Class であるかのように公開する可能性はありますか?

4

2 に答える 2

1

Barclass に 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のように のフィールドに直接アクセスできます。

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おそらくカスタムの TypeDescriptor を使用してそれを行うことができますが、それではコンパイル時の型とメンバーの検証が妨げられます.絶対に必要になるまではお勧めしません.

于 2013-10-29T13:35:57.150 に答える