使用反射来覆盖C#中的虚方法表
|
有没有办法在C#中更改虚拟方法表?喜欢更改虚拟方法指向的位置?
class A
{
public virtual void B()
{
Console.WriteLine(\"B\");
}
}
class Program
{
public static void MyB(A a)
{
Console.WriteLine(\"MyB\");
}
public static void Main(string[] Args)
{
A a = new A();
// Do some reflection voodoo to change the virtual methods table here to make B point to MyB
a.B(); // Will print MyB
}
}
没有找到相关结果
已邀请:
4 个回复
募磷
佬棠
将始终调用
。
芦歉竭皑
委婪绷冗诉
输出:
您甚至可以在cB.B()中调用
,这将有效地调用重写的委托,但会给出以下输出:
我建议您采用一些类似的方法或设计模式方法,甚至不要考虑反射Emit。您的代码将无法在高性能应用程序中使用。代表们很快,反思很慢。