PDA

View Full Version : مبتدی: توضیح Structure در C#



javady_joon
شنبه 30 آبان 1394, 12:59 عصر
با سلام
نت در این مورد خیلی جا ها رفتم ولی همه شون یکسری مطالب تکراری و سنگین میگن که متوجه نمیشم
اگر ممکنه کمی ساده تر برام توضیح بدین
پیشاپیش ممنونم

mrprestige
شنبه 30 آبان 1394, 19:21 عصر
با سلام
نت در این مورد خیلی جا ها رفتم ولی همه شون یکسری مطالب تکراری و سنگین میگن که متوجه نمیشم
اگر ممکنه کمی ساده تر برام توضیح بدین
پیشاپیش ممنونم
سلام دوست من وقتت بخیر ، خب برای شروع توضیحاتم اول باید با مفهموم کلاس خوب آشنا باشی . از لحاظ تعریف کردن این دو تا ( یعنی Struct و Class ) توی سی شارپ شبیه هم هستن یعنی اونجایی که شما دارین یه کلاس تعریف می کنی (مثلا با این مضمون : {...} Public Class student ) با Struct (مثلا با این مضمون : {...} Public Struct student ) فرقی ندارن ، تفاوت بعدی Struct نمیتونه ارث بری داشته باشه ولی کلاس هم میتونه از یه کلاس دیگه ارث بری داشته باشه هم از یه Struct دیگه . تفاوت بعدی ، وقتی میخوای توی برنامت از آرایه ها استفاده کنی Struct گزینه بهتری هست ولی برای کلاس از Collections ها استفاده کنی ( اگه احیانا نمیدونی Collections چیه برو اینجا (https://msdn.microsoft.com/en-us/library/ybcx56wz.aspx) تفاوت بعدی اینه که داخل Struct ی تعریف کردی نمی تونی مقدار اولیه به متغییر هات بدی ، و در برای فراخوانی Struct کافیه اسم اون رو داخل محلی که میخوای فراخوانی بشه بنویسی ( طبق مثال بالا ;Student ) ولی در کلاس ( ()Student=new Student ) .

امیدوارم تونسته باشم مفهوم Structure رو اونطور که می خواستی بیان کرده باشم دوست من . یا علی

elec60
شنبه 30 آبان 1394, 19:47 عصر
مهمترين فرق class و struct در نحوه ايجاد و عملكردشون داخل حافظه است.
Class ها معمولترين Type رفرنسي هستند اما struct ها از نوع مقداري هستند.

مفهوم نوع رفرنسي و مقداري:
انواع رفرنسي به گونه اي هستند كه در صورت ريختن يك متغير از اين نوع به يك متغير ديگه از همان نوع آدرس خانه اي از حافظه كه اولين متغير به اون اشاره ميكنه به متغير دوم ريخته ميشه و از اين به بعد هر دو متغير در واقع به يك شي اشاره مي كنن و اگه با يكي از اينها هر بلايي سر شي موجود در حافظه (Heap) بياريم اون يكي هم ميتونه تغييرات رو ببينه.

در انواع مقداري (Value Types) اگه متغيري درون متغير ديگري از همان نوع ريخته بشه يك كپي از كل شي (كه در Stack قرار داره، كه البته در Heap هم ميتونه باشه) به متغير دوم ريخته ميشه.


نوع int يك مثال از value type هست و نوع string هم يك مثال از reference type

يک موضوع مهم در مورد string :
اين Type به صورت immutable هست و اگه مثلا "string s1 = "CSharp باشه و string s2 = s1 در اينصورت طبق بحثی که بالا گفتم اگه s1 رو تغيير بديم(مثلا "s1 = "VB در اين صورت بايد s2 هم بشه VB (چون هر دو بايد به يک شی اشاره کنند) اما اگه تست کنين ميبينيد فقط s1 تغيير کرده. دليلش اينه که وقتی s1 رو تغيير ميديم به دليل Immutable بودن string يک شی کاملا جديدی ايجاد ميشه و s1 به اين شی جديد اشاره میکنه و فقط s2 به شی قبلی اشاره می کنه.