منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : سؤال حول المعامل Ctype
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم

لدي مثلا الفئة Virement أصلية  
أشتق منها فئة VirementBank وأضيف لها خصائص جديدة

ثم أقوم بهذه العملية

Dim v1 as new Virement
Dim v2 as new VirementBank = Ctype(v1,VirementBank )

عند التنفيذ ينطلق هذا الخطأ
Impossible d'effectuer un cast d'un objet de type 'VIREMENT' en type VirementBank

هل من طريقة أخرى لعمل التحويل  وشكرا
السلام عليكم


أولا غير صحيح أن تنشأ كانت جديد ب New وفي نفس الوقت تريد تحويله في سطرك الذي يبدو انك لم تنسخه كما هو من الكود الموجود لديك
كود :
Dim v2 as new VirementBank = Ctype(v1,VirementBank)

يجب أن تكون الفئة Virement موروثة من VirementBank بواسطة Inherits وهذا ما تنفيه الرسالة، إلا إذا كان المقصود بالاشتقاق غير Inherits

سيعمل الكود لو كان مثل
كود :
Dim v1 As New Virement

Dim v2 As VirementBank = CType(v1, VirementBank)

Dim v3 As New VirementBank
v3 = CType(v1, VirementBank)

كود :
Class Virement
    Inherits VirementBank

End Class

كود :
Class VirementBank

End Class
المشكلة ليست في الوراثة أنت هنا تحاول الحصول علي نوع من نوع اخر
أو بمعني أدق أنت هنا تحاول ان تقوم بعمل Casting و تحويل فئة الي فئة أخري  
و بالرغم ان احد الكلاسان مشتق من الأخر أي أنهم فعليا ينتميان الي نفس الأصل لكنك لن تحصل علي نتيجة دقيقة إلا إن كتبت دوال Ctype علي هيئة دوال من النوع Shared   و هذا يجب أن يتم إما في الكلاس الأصلي او الكلاس الأخر
أنصجك أن باستخدام Interface و تقوم بعمل Implementation له في كل من الكلاسان و هذا سوف ييسر لك الحصول علي نوع من الأخر