見代碼段除了泛型類之外,還有其他方法可以調用結構的接口方法嗎?
public interface I0
{
void f0();
}
public struct S0:I0
{
void I0.f0()
{
}
}
public class A<E> where E :I0
{
public E e;
public void call()
{
e.f0();
}
}
這裏爲呼叫IL代碼()
.maxstack 8
L_0000: ldarg.0
L_0001: ldflda !0 Temp.A`1<!E>::e
L_0006: constrained !E
L_000c: callvirt instance void Temp.I0::f0()
L_0011: ret
的約束前綴參考,也可用於接口方法上調用值類型,因爲實現接口方法的值類型方法可以使用MethodImpl進行更改。如果未使用約束前綴,則編譯器將被迫在編譯時選擇要綁定哪個值類型的方法。使用約束前綴允許MSIL在運行時綁定到實現接口方法的方法,而不是在編譯時。
這意味着它會調用一個包含f0接口方法代碼的方法,而不用裝箱結構。
做任何其他方式調用無拳擊接口方法存在如上C#中的GenericClass?
(我想這應該是最好的評論:))請參閱http://stackoverflow.com/questions/3032750/structs-interfaces-and-boxing – Matthias
感謝您的回覆。我修改了標題:除了在泛型中如何調用? – Vince
對我而言,我沒有閱讀完整的文章,因爲從標題我預計不同的東西:)對你的問題:我*猜*不。 – Matthias