تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
Object MemberwiseClone Method
#1
السلام عليكم ورجمة الله وبركاته

الكلاس Object هو كلاس يدعم جميع الكلاسات التي يتم كتابتها في الدوت نت أو بمعني أخر هذا الكلاس هو الأساس لكل الكلاسات الموجودة في الدوت نت


اليوم كنت احاول ان اكتب كلاس لأخذ صورة كاملة من سطح المكتب و تحويلها الي صورة شفافة و كنت أريد أن أنسخ هذه الصورة او بمعني أدق يكون لدي إمكانية الحصول علي نسخة من هذا الصورة قبل التعديل عليها لذلك أردت للكلاس الخاص بي أن يدعم ICloneable Intefrace

جميعكم سوف يلاحظون وعند كتابة أي كلاس جديد نجد ان الكلاس يحتوي علي بعض الدوال و الطرق التي تكون جزء من الكود الخاص بنا و من ضمن هذا الطرق و الدوال هناك دالة اسمها MemberwiseClone

و في واقع الأمر تلك أول مرة  أحاول فيها أن أفهم هذه الدالة و الهدف منها و كيفية الاستفادة منها و لقد كان من الطبيعي أن ألجا لموقع مايكروسوفت لأقرأ عن الموضوع وهناك وجدت مثالا بسيطا لتوضيح كيفية الاستفادة من هذه الدالة

و الهدف من هذا الدالة يتلخص في اننا و باستخدامها نستطيع أن نأخذ نسخة Copy من الكلاس

ولتوضيح الأمر قليلا لنفرض أننا نريد تعريف متغير يعبر عن أي كلاس شاملا البيانات الموجودة فيه
ثم لنفرض اننا نريد نسخة أخري من هذا الكلاس للتعديل عليها ثم استخدامها بشكل اخر و كل ذلك بدون تعريف متغير جديد من الكلاس و بدون أن تتأثر اليبانات الموجودة في المتغير الأصلي

و لمحاولة فهم الأمر بشكل جيد أخذت الكود الموجود في موقع مايكروسوفت و أعدت كتابته كما هو ثم بعد ذلك أعدت صياغته بشكل مختلف قليلا حتي يتضح لي الأمر تماماو الكود التالي يوضح الأمر:

كود :
Public Class Person
   Implements ICloneable

   Public ID As PersonID
   Public Age As Integer
   Public Name As String

   Public Function Clone() As Object Implements ICloneable.Clone
       Return Me.CreateDeepCopy(CreateShallowCopy())
   End Function

   Friend Function CreateShallowCopy() As Person
       Return CType(Me.MemberwiseClone(), Person)
   End Function

   Friend Function CreateDeepCopy(current As Person) As Person
       Return current
   End Function

End Class


كود :
Public Class PersonID
   Public IdNumber As Integer

   Public Sub New(IdNumber As Integer)
       Me.IdNumber = IdNumber
   End Sub

End Class ' PersonInfo



و الكود التالي يوضح كيفية تعريف متغير عن الكلاس ثم التعديل في بياناته ثم استخدامها مرة أخري

كود :
Public Class Form1

   Private p As Person = CType(Nothing, Person)

   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

       p = New Person
       p.Name = "Omar"
       p.ID = New PersonID(10)
       p.Age = 20
       Me.Label1.Text = p.ID.IdNumber
       Me.Label2.Text = p.Name
       Me.Label3.Text = p.Age

   End Sub

   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

       Dim deepCopyPerson As Person = p.CreateDeepCopy(p)
       Dim copiedPerson As Person = deepCopyPerson.Clone

       Me.Label4.Text = copiedPerson.ID.IdNumber + New PersonID(20).IdNumber
       Me.Label5.Text = copiedPerson.Name
       copiedPerson.Age += 100
       Me.Label6.Text = copiedPerson.Age
       Me.Button1.Enabled = False

   End Sub

End Class


لينك المرجع

في المرفقات يوجد نسخة من الكود اعلاه


الملفات المرفقة
.rar   Test_MemberWiseClone.rar (الحجم : 71.03 ك ب / التحميلات : 36)
الرد }}}


الردود في هذا الموضوع
Object MemberwiseClone Method - بواسطة silverlight - 06-10-15, 06:50 PM
RE: Object MemberwiseClone Method - بواسطة الشاكي لله - 06-10-15, 06:58 PM
RE: Object MemberwiseClone Method - بواسطة أبو عمر - 06-10-15, 07:15 PM
RE: Object MemberwiseClone Method - بواسطة silverlight - 07-10-15, 02:21 AM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  مقال تقني - سلسلة الكائنات Object Serialization بشكل مجمل RaggiTech 0 2,571 04-10-12, 11:38 AM
آخر رد: RaggiTech
  Object Initializers من جديد VB2008 RaggiTech 0 1,952 01-10-12, 06:29 PM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: