簡體   English   中英

我如何從屬性中獲取實例

[英]how can I get instance from the property

在我的應用程序中,我有一個類,它具有用戶定義類型的屬性,如下所示:

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

對於需要從主程序執行的某些操作,我創建了一個A列表,並在創建MyType對象時將其添加到MyProperty中。

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的對象實例。

我懷疑您的意思是您正在創建List<A>並且希望能夠從A的實例中找出MyType A哪個實例“擁有”它。 沒有將信息放入A (或沒有完整的MyType實例列表並對其進行檢查),就無法做到這一點。 畢竟, MyType兩個實例可以具有相同的A

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

哪個MyType a邏輯上與之關聯? 兩者皆有或兩者皆有,真的...

最干凈的方法是讓A知道它與哪個MyType顯式相關-然后,如果您嘗試將A的一個實例與MyType兩個實例相關聯,則可以決定會發生什么(應該拋出異常嗎?將兩者都保留為列表) ?保持更新?)您可能想使MyType.MyProperty更新傳入的值,以使關聯保持同步。

最簡單的答案:使用字典,而不是列表。 但是我覺得它很丑。 或放入內部父參照。

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

重要! 閱讀有關MemberwiseClone函數的信息

您為何無法執行此操作的任何原因:-

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

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

然后在主程序中,您可以從MyType獲取所有MyProperty,此外,您還可以訪問可能需要的有關MyType對象的任何信息。

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

public void ProcessFoo(int idOfFoo){}

然后,他們需要從Foo對象中獲取其他細節,並將其添加到簽名中

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

最好的方法(除非有一些怪異的限制)只是首先傳遞整個Foo對象。

public void ProcessFoo(Foo foo){}

嗯,我很樂意在沒有更多上下文的情況下提供任何其他“建議”。 我敢肯定,在您正在做的事情中,這是有道理的,但對我來說似乎很危險。

喬恩的答案與A的一個實例可以分配給MyType的MyProperty有關,因此,您要說的是A的實例也可以屬於MyPropertyX和MyPropertyY。

對不起stremlenye,但是克隆對象的目的是什么? 對我來說,創建一個全新的單獨實例將是一個很好的理由……尤其是因為除了最簡單的對象之外,很少能在所有對象上很好地實現克隆(也許有一個很好的理由,我只是看不見它)從示例)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM