2016-06-12 101 views
0

如果可能:爲什麼通用接口不能實現動態類型?

IList <dynamic> = new List <dynamic>; 

或:

class A <T> 
{ 
A(T){} 
} 

class B: A <dynamic> {} 

。爲什麼不可能這樣做:

class U: IEnumerable <dynamic> {} 

+0

問題的答案是鏈接http://programmers.stackexchange.com/questions/322034/why-generic-interface-cannot-implement-dynamic-type。 –

回答

1

最簡單的思考方式 - 動態不是一種類型

dynamic是一個編譯器指令,關閉所有編譯時檢查,並在運行時實現它們。

當你聲明一個變量的動態:

dynamic t = 123; 

t = t.Length; // crashes at runtime 

實際上你是在聲明變量爲System.Object,則表達式關閉所有編譯時檢查其涉及到的變量:

object t = 123; 

unchecked_for_errors 
{ 
    t = t.Length;  
} 

你不能使用<dynamic>就好像它是一種類型,因爲它確實不是一種。

改爲使用<object>

+0

你可以在我的問題中明確地看到我正在使用動態作爲常規類型。 –

相關問題