Re[2]: Преобразование типов делегатов
От: Александр Дольник Германия  
Дата: 15.05.07 08:33
Оценка:
Здравствуйте, ie, Вы писали:

ie>Здравствуйте, AkaSaint, Вы писали:


AS>>Вопрос: почему, казалось бы, очевидно-идентичные типы данных делегатов не преобразуются друг в друга?


ie>Давайте разберемся сначала вот с таким кодом, казалось бы, никак не связанным с вашими делегатами:


ie>
ie>class A
ie>{
ie>    int i;
ie>}
ie>class B
ie>{
ie>    int i;
ie>}

ie>[SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlAppDomain)]
ie>static void Main(string[] args)
ie>{
ie>    A a;
ie>    a = new A(); //OK
ie>    a = (A)new B(); //Compile-time error:Cannot convert type 'B' to 'A'
ie>    a = (A)(object)new B(); //Run-time error: InvalidCastException: Unable to cast object of type 'B' to type 'A'
ie>}
ie>


ie>Где проблема в этом коде вы понимаете?


я не понимаю. У меня скорее всего проблема похожего сорта. Получаю исключение InvalidCastException Unable to cast 'Type1' to 'Type1'. Type1 (условно) это делегат полученный вызовом Marshal.GetDelegateForFunctionPointer, при этом исходный указатель берется через WinApi. А потом при попытке Type1 type1 = (Type1) Marshal.GetDelegateForFunctionPointer(intPtr, typeof(Type1)) исключение. Если не кастировать, то исключений нет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.