假设我有两个课程,ClassA
和ClassB
如下:
class ClassA
{
public void MyFunctionA(ClassB classB)
{
classB.MyActionB = () => this.MySecretFunctionA(3); // "Hard coded 3"
}
private void MySecretFunctionA(int anInt)
{
Console.WriteLine(anInt.ToString());
}
}
class ClassB
{
public Action MyActionB;
public void MyFunctionB()
{
MyActionB();
}
private void MySecretFunctionB()
{
// Here
}
}
ClassB
是否有可能在运行时准确地“知道”MyActionB在调用时会做什么?例如,ClassB
是否有可能在运行时再次提取“3”? (参见“硬编码3”评论。)
ClassA
和ClassB
在不同的程序集中,如果它有所不同(我不这么认为)ClassB
的程序集在运行时加载。
在标题中,我建议反思,但如果在这种情况下它不是正确的术语,我会编辑它。如果有可能的话,只想知道如何做得好。感谢。
答案 0 :(得分:1)
您可以通过
访问IL的方法http://msdn.microsoft.com/en-us/library/system.reflection.methodbase.getmethodbody(v=vs.90).aspx
但是,这是否有任何实际用途取决于您的用例的具体程度。由于此信息未保存在元数据中,因此无法在运行时访问或反向设计语法树。
展望未来可能会使用新的Roslyn编译器,当它发布时。