哪个班级立即上课?

时间:2017-02-08 17:38:26

标签: c# class oop

我有两个班级

class ClassA{
    public ClassA(){
        // when this class is instantiated I want to know "who" is creating an instance of it?
        // In this case the answer should be 'ClassB'
    }
}

class ClassB{
    public SomeFunc(){
        // Do some stuff

        var a = new ClassA();
    }
}

我想知道ClassB何时创建一个ClassA实例,该实例是 ClassB 谁创建了一个新的ClassA实例。这是如何完成的?

3 个答案:

答案 0 :(得分:2)

您可以使用Type callingType = new StackTrace().GetFrame(1).GetMethod().DeclaringType; 类:

library(RVAideMemoire)
a <- c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 
  0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 
  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L)
b <- c("0", "1", "0", "1", "1", "0", "0", "1", "1", "0", "1", "1", 
  "0", "1", "0", "0", "1", "1", "0", "0", "1", "1", "0", "0", "1", 
  "1", "0", "1", "0", "0", "1", "1", "0", "0", "1", "1", "0", "0", 
  "1", "1", "0", "0", "1", "0", "0", "1", "1", "0", "0", "1", "0", 
  "0", "1", "1", "0", "1", "1", "0", "0", "1", "1", "0", "0", "1", 
  "1", "0", "0", "1", "1", "0", "1", "0", "0", "1", "1", "0", "0", 
  "1", "1", "0", "0", "1", "1", "0", "1", "0", "0", "1", "1", "0", 
  "0", "1", "1", "0", "0", "1", "1", "0", "1", "0", "0", "1", "1", 
  "0", "1", "1", "0", "0", "1", "1", "0", "1", "0", "0", "1", "1", 
  "0", "0", "1", "1", "0", "0", "1", "1", "0", "1", "0", "1", "0", 
  "1", "0", "1", "0", "1", "0", "1", "0", "0", "1", "0", "1", "0", 
  "1", "1", "0", "1", "0", "1", "0", "0", "1", "0", "1", "0", "1", 
  "1", "0", "1", "0", "0", "1", "0", "0", "1", "0", "1", "0", "1", 
  "0", "1", "0", "1", "0", "1", "0", "1", "0", "1", "0", "1", "0", 
  "0", "1", "0", "1", "0", "1", "1", "0", "1", "0", "1", "0", "0", 
  "1", "0", "1", "0", "1", "1", "0", "1", "0", "1", "0", "0", "1", 
  "0", "1", "0", "1", "1", "0", "1", "0", "1", "0", "1", "0", "1", 
  "0", "1", "0", "1", "0", "1", "0", "1", "0", "0", "1", "0", "1", 
  "0", "1", "1", "0", "1", "0", "1", "0", "0", "1", "0", "1", "0", 
  "1", "1", "0", "1", "0", "1", "0", "0", "1", "0", "0", "1", "1", 
  "1", "0", "1", "0", "1", "0", "1", "1", "0", "1", "0", "1", "0", 
  "1", "0", "1", "0", "1", "0", "1", "0", "1", "0", "0", "1", "0", 
  "1", "0", "1", "1", "0", "1", "0", "1", "0", "0", "1", "0", "0", 
  "1", "1", "0", "1", "0", "1", "0", "0", "1", "0", "1", "0", "1", 
  "1", "0", "1", "0", "1", "0", "1", "0", "1", "0", "1", "0", "1", 
  "0", "1", "0", "1", "0", "0", "1", "0", "1", "0", "1", "1", "0", 
  "1", "1", "0", "0", "1", "0", "0", "1", "0", "1", "0", "1", "0", 
  "1", "1", "0", "1", "0", "1", "0", "1", "0", "1", "0", "1", "0", 
  "1", "0", "1", "0", "1", "0", "0", "1", "0", "1", "0", "1", "1", 
  "0", "1", "0", "1", "0", "0", "1", "0", "1", "0", "1", "1", "0", 
  "1", "0", "1", "0", "0", "1", "0", "1", "0", "1", "1", "0", "1", 
  "0", "1", "0", "1", "0", "1", "1", "0", "1", "0", "1", "0", "1", 
  "0", "1", "0", "1", "0", "0", "1", "0", "1", "0", "1", "0", "1", 
  "0", "1", "0", "1", "1", "0", "1", "0", "1", "0", "0", "1", "0", 
  "1", "0", "1", "1", "0", "1", "0", "1", "0", "0", "1", "0", "1", 
  "0", "1", "1", "0", "1", "0", "1", "0", "0", "1", "0", "1", "0", 
  "1", "0", "1", "0", "1", "0", "1", "1", "0", "1", "0", "1", "0", 
  "1", "0", "1", "0", "1", "1", "0", "1", "0", "1", "0", "0", "1", 
  "0", "1", "0", "1", "1", "0", "1", "0", "1", "0", "0", "1", "0", 
  "1", "0", "1", "0", "1", "0", "1", "0", "1", "1", "0", "1", "0", 
  "1", "0", "0", "0", "1", "0", "1", "0", "1", "1", "0", "1", "0", 
  "1", "0", "0", "1", "0", "1", "0", "1")
c <- c("1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", 
  "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", 
  "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", 
  "1", "1", "1", "1", "2", "2", "2", "2", "2", "2", "2", "2", "2", 
  "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", 
  "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", 
  "2", "2", "2", "2", "2", "2", "2", "3", "3", "3", "3", "3", "3", 
  "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", 
  "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", 
  "3", "3", "3", "3", "3", "3", "3", "3", "3", "1", "1", "1", "1", 
  "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", 
  "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", 
  "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", 
  "1", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", 
  "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", 
  "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", 
  "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "3", "3", "3", 
  "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", 
  "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", 
  "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", 
  "3", "3", "3", "3", "3", "3", "1", "1", "3", "1", "1", "1", "1", 
  "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", 
  "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", 
  "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", 
  "1", "1", "1", "1", "1", "1", "2", "2", "2", "2", "2", "2", "2", 
  "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", 
  "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", 
  "2", "2", "2", "2", "2", "2", "2", "3", "3", "3", "3", "3", "3", 
  "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", 
  "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", 
  "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", 
  "3", "3", "3", "1", "2", "2", "2", "2", "2", "2", "2", "2", "3", 
  "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", 
  "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", 
  "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", 
  "3", "3", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", 
  "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", 
  "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", 
  "2", "2", "2", "2", "1", "1", "1", "1", "1", "1", "1", "1", "1", 
  "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", 
  "1", "1", "2", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", 
  "1", "1", "1", "1", "1", "1", "1", "1")

cochran.qtest(a~b|c)

答案 1 :(得分:1)

如何传递识别谁在呼叫:

class ClassA{
    public ClassA(string caller){
        // when this class is instantiated I want to know "who" is creating an instance of it?
        // In this case the answer should be 'ClassB'
        Console.WriteLine("Caller="+caller);
    }
}

class ClassB{
    public SomeFunc(){
        // Do some stuff 
        var a = new ClassA(nameof(ClassB));
    }
}

输出:

enter image description here

答案 2 :(得分:0)

正如许多其他人已经问到的那样,我也想知道你为什么要这样做。是否需要在运行时,如果是这样,为什么?否则一个好的记录机制可能会有所帮助吗?

您可以传递信息。或者,如果要自动化,可以使用其中一个属性来提供有关调用者的信息:https://msdn.microsoft.com/en-us/library/mt653988.aspx。使用这些属性的可能示例:

class ClassA
{
    public ClassA([CallerMemberName]string member = "", [CallerFilePath]string classFile = ""){
        // when this class is instantiated I want to know "who" is creating an instance of it?
        // In this case the answer should be 'ClassB'
        Console.WriteLine("Created using method {0} from file {1}", member, classFile);
    }
}

class ClassB
{
    public void SomeFunc(){
        // Do some stuff

        var a = new ClassA();
    }
}

输出:

  

使用文件c:\ Users \ Peter \ Temp \ ClassB.cs

中的方法SomeFunc创建

现在,如果您为每个类创建一个.cs文件,那么很容易从文件名中提取类名。这种方法的好处在于您不必编写调用者名称,因此没有紧密耦合。