2011-10-19 10 views
23

Dinamik bir parametrem varsa, derleyici döndürme türünü atlayıp dinamik olduğunu düşünür. ÖrneğinDinamik parametre, derleyicinin, yöntem dönüşünün dinamik olduğunu düşünmesine neden olur.

:

public MethodResult IsValid(object userLogin) 
{  
    return new MethodResult(); 
} 

Sen düşünürdüm:

var isValidResult = IsValid(someObject()); 

dynamic -> MethodResult 

olarak okumak mı Ama bu olduğunu düşünür:

dynamic -> dynamic 

İmzaya dinamik bir parametre eklemek, derleyicinin, yazılan dönüşe rağmen dönüşün ne olması gerektiğini bilmesini tamamen durdurur mu?

cevap

19

Evet, dinamik, derleyicinin herhangi bir parametre, özellik veya yöntem döndürme türündeki türü bilmesini engeller. gibi açık döküm ekleyin:

(MethodResult)IsValid(someObject)); 

burada nedeni C# dinamik dünyasına girmek kez geç bağlama girmeden olmasıdır. Derleyici herhangi bir statik tip analizi kullanamadığı için bu kodu doğrulayamaz. Böylece daha sonraya kadar ertelenir. Derleyici için bir kılavuz olarak statik dökümler sağlayarak bunun üstesinden gelebilirsiniz.

+1

Daha fazla ayrıntı için [MSDN - Dinamik türleri kullanma] 'yı denetleyin (http://msdn.microsoft.com/en-us/library/dd264736.aspx) - "Aşırı yük çözünürlüğü, derleme zamanında yerine çalışma zamanında gerçekleşir. Bir yöntem çağrısındaki argümanların daha fazlası ya da türü dinamikse ya da yöntem çağrısının alıcısı tip dinamikse. " - sonuç olarak çalışma zamanına kadar bilinen yöntem hiç çağrılmayacaktır. –