繁体   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