<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های مسعود آقاجانی</title>
        <link>https://virgool.io/feed/@m_68651077</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-17 04:04:57</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/881519/avatar/pSFeXr.jpeg?height=120&amp;width=120</url>
            <title>مسعود آقاجانی</title>
            <link>https://virgool.io/@m_68651077</link>
        </image>

                    <item>
                <title>Refrece Type vs Value Type</title>
                <link>https://virgool.io/@m_68651077/refrece-type-vs-value-type-eaojiskyl0ga</link>
                <description>سلامموردی که میخوام توضیح بدم Refrece Type vs Value Type هستشقبل هرچیزی بهتره یه خورده با ساختار ذخیره سازی در حافظه اشاره کنم.حافظه کامپیوتر از نظر مفهومی به تعدادی قطعه‌ی جداگانه تقسیم شده است. دوتا از این قطعات، Stack و Heap نامیده می‌شوند.Stack حجم کمتر  و ثابت و memory manegment هم کنترلش میکند ساختار ذخیره ان هم به صورت FILO  هستش(First In Last Out). از آنجا که در حافظه stack نیازی به پیدا کردن فضای خالی در حافظه نیست و محل قرارگیری اطلاعات مشخص است (بالای حافظه) بنابراین این حافظه سریع تر از حافظه heap است.Heap کند تر هستش و با حجم بیشتر و متغیر ،memory manegmentهم کنترلش نمیکند و وظیفه اون بر عهده برنامه نویس هستش.حالا یا دستی یا با (Garbage Collector)GC. به دلیل محاسبات برای یافتن آدرس شروع حافظه و در اختیار گرفتن pointer حافظه heap نسبت به stack کندتر است. همچنین اگر داده ها به صورت پشت سر هم درblock های حافظه قرار نگرفته باشند (این احتمال بسیار زیاد است) موجب کندی در بازیابی اصلاعات خواهد شدحالا میریم سراغ بحث اصلی خودمون:ValueType:شامل متغیر های int,double,boolan,floatو... میشود در واقع متغیر هایی که در ساختار struct تعریف میشود و در قسمت Stackاز حافظه ذخیره میشود .تا زمانی که مقداری به انها داده نشده باشد حافظه ای اختصاص داده نمیشودمثلا:Int x=10 ;Int y=x;RefrenceType:شامل متغیر هایclass,enum,sting,interface... میشود و در قسمت Stackاز حافظه تعریف  میشود ولی مقادیرش در قسمت heap قرار میگیرد  و اگر مقداری نداشته باشد توسط GCپاک میشود مثلا:Student s1Student s1=new student();Student s2=s1;در VT چون مقایر در یک بلوک جدا از حافظه است تغییر در مقدار آن بعد از تعریف و مقدار دهی اثری در مقدار اولیه ندارد.Int x=5;Static void  change(int x){X=200;}Change(x);Console.writeline(x);  result =5 !!!البته روش هایی برای تغییر مقدار اولیه وجود دارد(پارامتر های ref/out)این نکته در مورد RFوجود ندارد و با تغییر مقدار بعد از تعریف و مقدار دهی مقادیر اولیه هم عوض میشود. چون هر دو به یک بلوک از حافظه اشاره میکند و با تغییر مقدار بلوک  هر متغییری که به آن بلوک اشاره کند مقدار تغییر یافته را دریافت میکند.Student s1=new student();S1.name=masoudS1.id=5;Static void change(student s){s.id=10;s.name=jack;}Change(s1);Console.writeline(s.name); result =10!!!Console.writeline(s.id); reuslt =jack!!!در یک گراف بخوام نحوه ذخیره سازی VTو RTرو بکشم شبیه شکل زیر میشود:</description>
                <category>مسعود آقاجانی</category>
                <author>مسعود آقاجانی</author>
                <pubDate>Thu, 10 Nov 2022 16:09:18 +0330</pubDate>
            </item>
            </channel>
</rss>