سؤال

وأود أن تبقي قائمة من فئة معينة من الكائنات في طلبي.ولكن ما زلت أريد الكائن إلى أن القمامة التي تم جمعها.يمكنك إنشاء إشارات ضعيفة في .الشبكة ؟

للرجوع إليها:

الجواب من MSDN:

إنشاء ضعف الاشارة مع كائن إنشاء WeakReference باستخدام مثيل الكائن تعقب.ثم يمكنك تعيين الهدف مكان الإقامة إلى أن موضوع تعيين كائن إلى null.عن مدونة سبيل المثال ، انظر WeakReference في الصف المكتبة.

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

المحلول

نعم ، هناك عام ضعيفة الفئة المرجعية.

MSDN > ضعف الإشارة

نصائح أخرى

يمكنك إنشاء إشارات ضعيفة في .الشبكة ؟

نعم:

WeakReference r = new WeakReference(obj);

يستخدم System.WeakReference.

نعم...

هناك مثال جيد يمكن العثور عليها هنا:

http://web.archive.org/web/20080212232542/http://www.robherbst.com/blog/2006/08/21/c-weakreference-example/

في الفئة الخاصة بك يمكنك إنشاء اثنين من الأعضاء المتغيرات:

WeakReference _weakRef = null;

Person _strongRef = null;

يمكنك إنشاء اثنين من جديد Person الكائنات (التي هي كائنات بسيطة أنا خلقت فقط على سبيل المثال ، تتكون من Name الملكية و بعض المراجع شفرة التتبع).بجانب تعيين الأعضاء المتغيرات حديثا الحالات التي تم إنشاؤها Person الكائنات.

_strongRef = p;

_weakRef = new WeakReference(p1);

الفرق هنا ستلاحظ أن _strongRef هو مجرد عادي المرجعية ، بينما _weakRef يتم تعيين WeakReference كائن مع شخص كائن (p1) مرت في كمعلمة في منشئ.

إذا جمع القمامة كانت تحدث ، أو فقط لأغراض الاختبار اتصلت بنفسك مع:

GC.Collect();

ثم p1 الكائن الهدف الذي يقام من قبل _weakRef عضو متغير يجب أن يكون القمامة التي تم جمعها.يمكنك كتابة رمز التحقق:

if (_weakRef.IsAlive)

إذا كان WeakReference لا يزال على قيد الحياة يمكنك تحويل WeakReference قوية أو عادية المرجعية باستخدام رمز مثل هذا:

Person p = _weakRef.Target as Person;

الآن p المرجع هو تعامل على أنها إشارة قوية و لن يكون جمعها حتى أنها لم تعد تستخدم.إذا أردت الحفاظ على المرجعية بعد نطاق يمكن تعيين إلى متغير عضو.

هنا هو الكاملة (غير الآمن موضوع) تنفيذ عينة من WeakReference

ClassA objA = new ClassA();
WeakReference wr = new WeakReference(objA);
// do stuff 
GC.Collect();
ClassA objA2;
if (wr.IsAlive)
    objA2 = wr.Target as ClassA; 
else
    objA2 = new ClassA(); // create it directly if required

WeakReference هو في System مساحة وبالتالي لا تحتاج إلى تضمين أي الجمعية الخاصة من أجل ذلك.

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