我怎样才能从物业中获取实例

时间:2010-03-24 08:20:50

标签: c# .net properties instance

在我的应用程序中,我有一个具有用户定义类型属性的类,如下所示:

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的对象实例。

3 个答案:

答案 0 :(得分: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明确关联 - 然后你可以决定如果你试图让一个A实例与两个{{{{ 1}}(它应该抛出一个异常吗?保持两个列表?保持较新?)你可能想让MyType更新传入的值,以保持关联同步。

答案 1 :(得分:1)

最简单的答案是:字典,而不是列表。但我觉得它很难看。 或者输入内部父参考。

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

答案 2 :(得分:0)

你不能这样做的原因是: -

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){}

嗯,我毫不犹豫地在没有更多背景的情况下提供任何额外的“建议”。我确信在你正在做的事情的背景下这是有道理的,但它似乎对我有害。

Jon的答案与A的一个实例可以分配给MyType的MyProperty非常相关,那么你所说的是A的实例也可以属于MyPropertyX和MyPropertyY。

抱歉stremlenye但是克隆对象的目的是什么?对我来说,需要有一个很好的理由来创建一个全新的独立实例...特别是因为除了最简单的对象之外,克隆很少能很好地实现(也许有一个很好的理由,我只是看不到它从例子中。)