سؤال

إذا تم تنفيذ فصل ICloneable, ، ماذا يعني ذلك؟

هل كانت مفيدة؟

المحلول

هذا هو IClonable.Clone طريقة. تقول الوثائق أن الطريقة تهدف إلى استنساخ الكائنات. تلاحظ الوثائق على وجه التحديد أن الاستنساخ يمكن أن يكون عميقًا أو ضحلًا. ويلاحظ أيضا النوع الناتج يجب كن من نفس النوع مثل الكائن الذي يتم استنساخه ، ولكن لا يوجد ضمان في نظام النوع الذي هو في الواقع كذلك.

لتلخيص ذلك ، لا يقدم الكثير من الوعود الشاقة ، ولكن القصد من ذلك هو إنشاء استنساخ مستقل.

نصائح أخرى

هذا يعني فقط أن الفصل يجب أن ينفذ طريقة Clone هذا يعيد كائن ، وليس أكثر من ذلك. لذلك يمكنك الحصول على طريقة تقبل iClonable ومن ثم يمكنك استنساخ هذا الكائن.

في الأساس ، فإنه يسمح فقط بالاستنساخ:

http://msdn.microsoft.com/en-us/library/system.iclonable.aspx

عند تنفيذ أي واجهة ، يتعين عليك تحديد الطرق في تلك الواجهة. في هذه الحالة ، يجب تحديد طريقة الاستنساخ في فصلك.

مثال من Microsoft:

public object Clone()
{
    return this.MemberwiseClone();
}

Iclonable ليس ذا معنى من تلقاء نفسه ، ولكنه قد يكون مفيدًا بالاقتران مع القيود الأخرى (على سبيل المثال ، يمكن للمرء أن ينص على أن المعلمة يجب أن تكون foo تنفذ iClonable). وبالتالي ، يمكن للمرء أن يكون لديه foo ، و clonablefoo ، و advancedfoo ، و cloneableadvancedfoo ، مما يسمح لمشتقات foo التي تدعم الاستنساخ لتمييز عن تلك التي لا ، ولكن أيضا السماح بالإجراءات التي تتوقع foo القابلة للاستنساخ لقبول مشتق من FOO.

لسوء الحظ ، على الرغم من أن معلمة الوظيفة التي تم تمريرها مع قيود ICLONABLE و FOO يمكن استخدامها كإيكلون قابلة للتكنولوجيا ، وبصفتها فو ، لا توجد وسيلة لإنشاء ميدانية تلبية مثل هذه المعايير ، ولا توجد أي طريقة لتطبيق حقل ما. قد يكون هناك علاج لهذا هو إنشاء طريقة iClonable (من t كـ iclonable (من t)) ، والتي تحتوي على طريقة "استنساخ" التي تُرجع t ، وطريقة "ذاتية" تُرجع أيضًا t (وبالتالي ، حقل يحمل ". يمكن الوصول إلى iClonable of Foo "كأسلوب FOO عبر طريقة" الذات "). ستكون هناك حاجة إلى القليل من العناية لجعل كل هذا العمل ، ولكن يجب أن يكون النمط لطيفًا جدًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top