OpCodes.Castclass。有必要吗?

时间:2011-06-07 12:53:28

标签: c# cil reflection.emit

当准备调用方法时,是否需要在堆栈顶部引用(B)实例时发出OpCode.CastClass(typeof(A)),其中B是类,派生自A类型A的参数?

增加:

interface IFoo
{
    void IFoo();

}

public class A:IFoo
{
    public void IFoo()
    {

    }
}
public class B:A,IFoo
{
    new public void IFoo()
    {

    }
}

var b = new B();

(b as IFoo).Foo();
((b as A) as IFoo).Foo();

1 个答案:

答案 0 :(得分:2)

我猜你有这样的事情:

class A
{
    public void Foo() { }
}

class B : A
{
}

需要在:

之间做出决定
B b = new B();
b.Foo();

B b = new B();
((A)b).Foo();

两者都有效。但是演员表没有必要,因为B继承了A的所有成员。