-2

假设我有三个 classes A,如下所示,并且B具有属性和Type :CABPro1Pro2C

class A
{
    public C Pro1 {get; set; }
}

class B
{
    public C Pro2 { get; set; }
}

public class C
{
    public void Do()
    {
        //How to get Type of object to reference to current object C
        //Example: Either type A or B
    }
}

Do在类的方法中,C我想获取要引用当前对象 C 的当前父对象(通过Pro1Pro2)。在此示例中,A 或 B,但一般来说,它可能是非常动态的:

var a = new A() { Pro1 = new C() };
a.Pro1.Do(); //will get Type A in Do

var b = new B() { Pro2 = new C() };
b.Pro2.Do(); //with get Type B in Do

我可以通过哪种方法实现这一目标?

4

3 回答 3

2

您可以将“父”对象作为参数传递给 C 构造函数:

public class C
{
    private readonly object _parent;
    public C(object parent)
    {
        _parent;
    }

    public void Do()
    {
        Type type = _parent != null ? _parent.GetType() : null;
        // Do something with type...
    }
}
于 2012-09-24T16:32:39.047 回答
1
var a = new A() { Pro1 = new C() };
a.Pro1.Do(); //will get Type A in Do

var b = new B() { Pro2 = new C() };
b.Pro2.Do(); //with get Type B in Do

这样,您就已经知道哪个对象在进行调用(a 或 b);那么你正在做的事情可能没有意义。如果是这样,您总是可以通过简单的继承来解决这个问题

C a=new A();
C b=new B();

并且可以在 ctors A 或 B 中插入调用者的身份。

于 2012-09-24T16:54:22.813 回答
1

Thomas Levesque 提供了一种添加更多信息C以实现此目的的方法。如果它是您要存储的类型而不是特定实例C,则可以将C其设为泛型,如下所示:

class A
{
  public C<A> Pro1 { get; set; }
}

class B
{
  public C<B> Pro2 { get; set; }
}

public class C<T> where T : class   // maybe you want to add other "where" constraints on T
{
  public void Do()
  {
    // you can use T in here
  }
}
于 2012-09-24T18:04:01.990 回答