PDA

View Full Version : سوال: سوال در رابطه با refrence type ها



mehdihadeli
شنبه 06 شهریور 1389, 00:29 صبح
سوال در رابطه با refrence type ها

آيا براي همه refrence type ها بايد در ساخت instance از new استفاده كنيم تا روي heap مقدار دهي شود (intialize)

md_bluelily
شنبه 06 شهریور 1389, 01:07 صبح
تقریبا بله.
مورد استثنا String هست که به New احتیاجی نداره.

موفق باشید.

#aliyari_C
شنبه 06 شهریور 1389, 01:12 صبح
سلام
یه نگاه بنداز : http://barnamenevis.org/forum/showthread.php?t=170097
موفق باشی

mehdihadeli
شنبه 06 شهریور 1389, 03:18 صبح
من بيشتر منظورم روي delegate بود

اين كد رو يه نگاه بندازين بدون new كردن Mydel2 اونو مقدار دهي كرده ؟مگه refrence type ها نبايد روي heap مقدار دهي بشن اينجا كه روي stack مقدار دهي شده؟


using System;

namespace Delegates
{
public delegate void MyDelegate(string Name);
class Program
{
private static void MethodA(string Name)
{
Console.WriteLine("Hello {0}", Name);
}


static void Main(string[] args)
{
MyDelegate Mydel1 = new MyDelegate(MethodA);
MyDelegate Mydel2 = MethodA; //inja Mydel2 ro instance nasakhte ba new
//pas chetori roye heap intialize mishe?
Mydel1("Mohsen");
Mydel2.Invoke("Jamshidi");
}
}
}

md_bluelily
شنبه 06 شهریور 1389, 04:39 صبح
توی این مثال به صورت خودکار آدرس )reference( اون متد به delegate اختصاص داده میشه.

موفق باشید.

mehdihadeli
شنبه 06 شهریور 1389, 12:08 عصر
new مگه كارش تخصيص حافظه روي heap نيست؟
براي class هم ميتوان از new استفاده نكرد

#aliyari_C
شنبه 06 شهریور 1389, 15:18 عصر
فکر کن تو یک گوشی خریدی, خوب, بعدش هم حتما باید یک سیمکارت هم براش بخری که بتونی ازش استفاده کنی.
بعد یک ماه می خوای گوشی ات رو عوض کنی , خوب عوض کردی (مبارکه), حال دوباره که سیم کارت که نمی خری(حالا اون استثنا......)
بعدش هم Class , یک کلاس است , (تعریف کلاس رو بخون) کلاس مهم نداریم.
بازم بعدش , فکر کنم منظورت کلاس های Static است.که دیگه زحمتش با خودت.
موفق باشی
__________________________________________________ __________________________________________________
چون به دریا می توانی راه یافت
سوی یک قطره چرا باید شتافـت

بی تو ای آزادی ای والا کلام گر نباشی در میان باید که از دنیا گریخت...

md_bluelily
شنبه 06 شهریور 1389, 15:20 عصر
توی این مثالی که شما آوردین آدرس توی Heap مستقیما به delegate داده میشه.

ببخشید. منظورتون رو از جمله دومتون متوجه نشدم. میشه بیشتر توضیح بدید ؟

موفق باشید.

#aliyari_C
شنبه 06 شهریور 1389, 15:38 عصر
آخه دیدم ازون سوالاست,یعنی بایک مثال کوچیک خواستم , مفاهیم استفاده موجدد و ....
برا رفیقمون تشریح کنم. تا مطلب کمی روشن بشه....OK
برداشت من از جمله ایشان این بود که , می خواد کلاسی داشته باشه که نیاز به new کردنش نباشه(و بدون مقدار دهی اولیه) , خوب یعنی بیا از Static استفاده کن.

میلاد قاضی پور
شنبه 06 شهریور 1389, 15:48 عصر
جدی این کد اصلا کار میکنه ؟
mydalagate یه پارامتر رشته ای میخواد چرا یه پارامتر از نوع خودش که ووید هست بهش داده شده !!:اشتباه:؟

md_bluelily
شنبه 06 شهریور 1389, 17:32 عصر
بله، کار میکنه.
باید کار کنه، اگر این اتفاق نیوفته باید تعجب کرد.

موفق باشید.

arian_sh3
یک شنبه 07 شهریور 1389, 06:07 صبح
دوست عزیز تا جائی که من میدونم فقط کلاس های static هستند که نیازی به نمونه سازی از شئ ندارند و میشه مستقیم ازشون استفاده کرد. برای کلاس های نمونه حتما باید نمونه سازی اتفاق بی افته مگر اینکه شئ قبلا ساخته شده باشه و هنوز در قید حیات باشه... نمیدونم شاید من درست نفهمیدم جریان چیه اگه نفهمیدم بهم یه مقدار بیشتر توضیح بدین...