PDA

View Full Version : null نشدن شیء اول



Eight 01
شنبه 17 مهر 1395, 02:46 صبح
سلام

درکد پایین c2 را مساوی c1 قرار دادم پس هر دو به یکی شی مراجعه میکنند. اما میخوام زمانی که c2 رو نال میکنم c1 هم نال بشه. ولی این اتفاق در کد پایین نمیوفته. چه کار میتونم بکنم؟

Class1 c1=new Class1();
Class1 c2=c1;
c2=null;
//c1 نال نمیشه!

محمد آشتیانی
شنبه 17 مهر 1395, 09:33 صبح
سلام
خب معلومه نبایدم این اتفاق بیفته

این لینک رو ببین کاملا متوجه میشی (با یک تصویر ساده پاسخ داده) http://stackoverflow.com/questions/8069396/setting-a-type-reference-type-to-null-doesnt-affect-copied-type

Eight 01
شنبه 17 مهر 1395, 11:36 صبح
پس هیچ راهی نیست که، c1 به هر طریقی ارجاعی به خودِ c2 باشه ؟ شبیه چیزی که تو سی پلاس پلاس هستش؟
ارسال به تابع با ref به کارم نمیاد. باید c2 ارجاعی به خود c1 باشه تا زمانی که c2 رو تغییر میدم c1 هم تغییر کنه...

hamid_hr
شنبه 17 مهر 1395, 11:55 صبح
object a = 0;
ref object b = ref a;
a = null;
تو همون صفحه که جناب آشتیانی ارجاع دادن هست

Eight 01
شنبه 17 مهر 1395, 12:35 عصر
گفته ممکنه همچین قابلیتی اضافه بشه .البته از اون پست 6 سال گذشته هنوز اتفاقی نیوفتاده...

Mani_rf
شنبه 17 مهر 1395, 13:28 عصر
سلام

درکد پایین c2 را مساوی c1 قرار دادم پس هر دو به یکی شی مراجعه میکنند. اما میخوام زمانی که c2 رو نال میکنم c1 هم نال بشه. ولی این اتفاق در کد پایین نمیوفته. چه کار میتونم بکنم؟

Class1 c1=new Class1();
Class1 c2=c1;
c2=null;
//c1 نال نمیشه!

با استفاده از shallow copy میتونی همچین کاری اینجام بدی. البته این امکان جزو متد های پیشفرض دات نت نیست و باید بنویسیش. اگر جستجو کنی متد آماده برای این کار هست