C#可以访问父构造函数中的调用者

时间:2011-08-17 13:51:10

标签: c#

我有一个孩子和一个父类,因此:

class B : A{
    public B : base(){
    // stuff
    }
}



class A{
    public A(){

    // how can I gain access here to the class that called me, 
    // ie the instance of class B that's being instantiated.

     }  
}

如上所述,我的问题是我是否可以在父类的构造函数中看到谁调用了父构造函数。

执行此操作的一种方法是在A中有一个单独的函数,从B中传递this。有什么更简单的,即我可以在对象初始化期间执行此操作,还是在对象构建过程中还为时尚早?在我可以从B内访问之前,整个对象A是否需要“准备就绪”?

谢谢!

2 个答案:

答案 0 :(得分:9)

A内,这很简单 - 如果您确信 <{1},则只需使用this并将其投放到B而不是任何其他派生类。该对象已经是B的实例。

但是,从构造函数调用虚方法通常是一个错误的想法,因为B构造函数的主体尚未运行,所以它只是半初始化。我曾经遇到过一些痛苦的情况,但是如果你告诉我们你想要实现的目标,我们可能会想出更清洁的东西。

答案 1 :(得分:1)

您可以检查实例化的类型:

public A()
{
  var theType = this.GetType(); // will be typeof(B) in your example
}

但是访问实例(例如它的属性)可能并不明智,因为在基类型的构造函数执行时,派生类型尚未初始化。