我有两个班级
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实例。这是如何完成的?
答案 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));
}
}
输出:
答案 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文件,那么很容易从文件名中提取类名。这种方法的好处在于您不必编写调用者名称,因此没有紧密耦合。