2011-06-07 54 views
3

在準備調用具有參數的方法時,如果在堆棧頂部引用(B)的實例(其中B是類,從A派生),是否需要發出OpCode.CastClass(typeof(A)) A型?OpCodes.Castclass。有必要嗎?

增加:

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(); 
+2

當你忽略它並運行發出的代碼會發生什麼? – dtb 2011-06-07 12:56:44

+0

在兩種方式(發出|不發出)一切工作正常。 – Kelqualyn 2011-06-07 12:59:24

+0

所以答案是:不,這是沒有必要的。 – dtb 2011-06-07 13:01:29

回答

2

我想你有這樣的事情:

class A 
{ 
    public void Foo() { } 
} 

class B : A 
{ 
} 

和需要之間做出選擇:

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

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

這兩個工作。但演員陣容不是必需的,因爲B繼承了A的所有成員。