如何获取哪种类型的父对象通过属性引用当前对象

时间:2012-09-24 16:28:15

标签: c# .net

假设我有三个课程ABC,如下所示,AB有属性Pro1和{{ 1}}类型Pro2

C

在类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的当前父对象(通过CPro1)。在这个样本中,无论是A还是B,但总的来说,它可能非常动态:

Pro2

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

3 个答案:

答案 0 :(得分: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...
    }
}

答案 1 :(得分: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();

并且可以插入呼叫者A或B的身份。

答案 2 :(得分: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
  }
}