Neden bir temsilci örneğini örneğini T
genel türüne çeviremiyoruz? Genel bir tür için temsilci açılamıyor T
MulticastDelegate
türetilen bir tür bir
temsilci olduğu T, bir örneğini oluşturan bir yardımcı yöntem
CreateDelegate
düşünün.
T CreateDelegate<T>() {… }
Ne yazık ki jenerik aşağıdaki derleme hatayı veren MulticastDelegate
türetilen bir türüne T
sınırlamak için izin vermez:
Constraint cannot be special class 'System.MulticastDelegate'
Bununla birlikte, bu yarar yöntem T
olmadığını kontrol edilir MulticastDelegate
ile uyumlu olan ve Yansıma aracılığıyla Delegate::CreateDelegate
aracılığıyla bir temsilci oluşturma. Ben object
ilk döküm ve sonra T
için iyi çalışır eğer Ancak
Cannot convert type 'System.Delegate' to 'T'
:
bizT
için
Delegate::CreateDelegate
sonucunu döküm çalışırsanız Ama, biz şu derleme hatası alırsınız
T h = (T) ((object) Delegate.CreateDelegate(typeof(T), target, m));
Niçin doğrudan temsilci T'ye yapamıyoruz?
bunu yapar: '' T h = Delegate.CreateDelegate (typeof (T), hedef, m) T; ''? –
Evet, işe yarıyor. Ve daha da az mantıklı. IMHO, her iki operatörün ('' 've _cast_) davranışları tutarlı olmalıdır. –
bu yol, daha sonra döküm nesnesinden T'den daha güvenlidir, eğer döküm başarısız olursa size boş verir –