2013-10-29 125 views
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; 

在換句話說,有沒有可能發佈酒吧類的領域,如果酒吧是一個基類?

+0

你想組合工作像繼承?你必須在Foo中滾動你自己的屬性。 – Vivek

回答

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來實現,但這反過來會阻止編譯時類型和成員驗證。我不建議直到你確實需要。

+0

OP使用'set'訪問器以及 –

+0

我相信他的智能可以找到該模式並相應地應用。 – quetzalcoatl

+0

這就是我想要實現的,但我想自動擁有它 – MistyK

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; } 
} 

另一種選擇是繼承BarFoo,如:

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

然後你可以直接訪問Bar的領域:

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

或者'public bar field {get;私人設置; }'。 – Dennis