2010-03-24 40 views
0

在我的應用程序獲得實例我有有這樣的用戶定義類型的屬性的類:我如何從屬性

class MyType 
{ 
    public A MyProperty 
    { 
     get; 
     set; 
    } 
} 
class A 
{ 
    .....some methods and proeprties 
} 

對於某些操作,我需要從我的主程序執行,我已經創建了一個列表,並在添加到它myProperty的時候創造的MyType

List<A> myList = new List<A>(); 

MyType m1 = new MyType(); 
myList.Add(m1.MyProperty); 

MyType m2 = new MyType(); 
myList.Add(m2.MyProperty); 

......more instances 

的對象,並把它傳遞給我的主要程序,並有我的這些特性,這反映了在那裏也情況進行不同的操作。有沒有什麼辦法可以從列表中的屬性中獲取任何特定MyProperty的對象實例。

回答

1

我懷疑你的意思是你要創建一個List<A>並希望能夠從A它的實例MyType比如「擁有」它找出來。如果沒有將信息放入A(或有全面的MyType實例列表並檢查它們),則無法這樣做。畢竟,MyType兩個實例可以有相同的A

MyType first = new MyType(); 
MyType second = new MyType(); 
A a = new A(); 
first.MyProperty = a; 
second.MyProperty = a; 

哪個MyTypea邏輯關聯?兩者或兩者都不是,真的...

最乾淨的方法是讓A瞭解哪些MyType它與相關的明確 - 那麼你可以決定是否試圖擁有MyType A關聯的兩個實例中的一個實例應該發生什麼(應該拋出異常?既保持作爲一個列表?保持更新?)你可能想使MyType.MyProperty更新要傳遞的值,以保持關聯同步。

+0

對不起,我錯誤地輸入了那個,我後來更新了我的問題 – viky 2010-03-24 08:38:57

1

的simlest答案:使用字典,就不一一列舉。但我認爲它很醜。 或放入內部家長參考。

class A:ICloneable 
{ 
    internal MyClass _parent; 

    public MyClass Parent 
    { 
     get 
     { 
      return this._parent; 
     } 
    } 

#region ICloneable Members 

    public object Clone() 
    { 
     return this.MemberwiseClone(); 
    } 

#endregion 

    .....some methods and proeprties 
} 

class MyType 
{ 
    private A _myProperty; 

    public A MyProperty 
    { 
     get 
     { 
       return this._myProperty; 
     } 
     set 
     { 
       this._myProperty = a.Clone(); 
       this._myProperty._parent = this; 
     } 
    } 
} 

Important! Read about MemberwiseClone Function

+0

看起來不錯,但是有一些錯字:_myPropery。 – Polyfun 2010-03-24 09:17:23

+0

O!謝謝。編輯。 – Stremlenye 2010-03-24 11:26:44

0

任何理由,你爲什麼不能這樣做,而不是: -

List<MyType> myList = new List<MyType>(); 

MyType m1 = new MyType(); 
myList.Add(m1); 

然後在主程序中你可以得到所有的myProperty的的從MyType的,再加上你將有訪問您可能需要的MyType對象上的任何信息。

的想法是有點類似這樣的......我經常看到開發人員創建這樣

public void ProcessFoo(int idOfFoo){} 

再後來,他們需要從Foo對象等細節,他們加入到簽名的方法

public void ProcessFoo(int idOfFoo, string name){} 

最好的辦法(除非有一些奇怪的限制)只是通過在首位整個Foo對象...

public void ProcessFoo(Foo foo){} 

嗯,我毫不猶豫地給出任何額外的「建議」沒有更多的上下文。我確信,在你所做的事情背景下,這是有道理的,但對我來說似乎很危險。

Jon的答案與A的一個實例可以分配給MyType的MyProperty非常相關,那麼您所說的是A的實例也可以屬於MyPropertyX和MyPropertyY。

對不起,但克隆對象的目的是什麼?對我來說,創建一個全新的單獨實例需要有一個很好的理由......特別是因爲克隆很少在所有對象上實現,除了最簡單的對象之外(也許有一個很好的理由,我只是看不到它從示例中)。

+0

對於某些類型我可能有多個屬性類型A – viky 2010-03-25 05:04:16

+0

上面修改的回覆...評論沒有足夠的字符... – wallismark 2010-03-25 12:55:12