PDA

View Full Version : سوال: تفاوت struct و class چیست؟و در چه مواقعی باید از struct استفاده کرد؟



mostafapro
پنج شنبه 01 اردیبهشت 1390, 14:46 عصر
سلام.من تفاوت struct و class رو می دونیم ولی نمیدونم در چه مواقعی باید از struct استفاده کرد؟

FastCode
پنج شنبه 01 اردیبهشت 1390, 15:09 عصر
مواقعی که میخواهید با توابع native کار کنید.
مواقعی که مشکل حافظه دارید و هیچ راهی به ذهنتون نمیرسه.هر struct در محیط ۳۲ بیت ۸ بایت و در محیط ۶۴ بیت ۱۶ بایت کوچیکتره که اگر virtual function table و چند تا چیز دیگه رو هم بهش اضافه کنیم بیشتر هم میشه.

tdkhakpur
پنج شنبه 01 اردیبهشت 1390, 15:30 عصر
من تفاوت struct و class رو می دونیم ولی نمیدونم در چه مواقعی باید از struct استفاده کرد؟
sruct معرف یک بسته هست که میتونید برای ذخیره و بازیابی همه بسته های اطلاعاتی استفاده کنید تا داده رو بصورت فیلد که نام مشخصی داره ذخیره و بازبی کنید و شما از این طریق بدانید محدوده یک فیلد یا هر یک از اجزای ساختار تا کجاست.
اما class رو میشه گفت هم structre هست هم کد که میتونید بهش مجوز دسترسی هم بدید به قسمتهایی از کلاس رو بدید مثلا بگید نمیخواهید یک فیلد در جای دیگه مستقیما مورد دسترسی اعمال بشه و یا ...
تفاوت اصلی کلاس و ساختار رو میشه در سازنده و مخرب دانست و اساس مخرب و سازنده هم بر میگرده به آغازش و مقدار دهی اولیه به فیلدها و همچنین تخزیب و آزاد سازی منبع در اخر کار .

sajjadrad
پنج شنبه 01 اردیبهشت 1390, 21:02 عصر
struct در حقیقت ساخت یک متغیر با خصوصیات دلخواه شماست...
به عنوان مثال متغیر int یه خصوصیاتی داره...مثلا فقط شامل مقادیر عددی صحیح میشه و ... struct هم دقیقا همینه..یعنی شما میتونید یک متغیر بسازید اما با خصوصیات دلخواه خودتون...
البته این یه مثال ساده برای درک بهتره.
اما کلاس در حقیقت مثله یه نقشه برای یه ساختمون نسبت به شی میمونه و خصوصیات اشیا رو تعریف میکنه

FastCode
پنج شنبه 01 اردیبهشت 1390, 21:40 عصر
sruct معرف یک بسته هست که میتونید برای ذخیره و بازیابی همه بسته های اطلاعاتی استفاده کنید تا داده رو بصورت فیلد که نام مشخصی داره ذخیره و بازبی کنید و شما از این طریق بدانید محدوده یک فیلد یا هر یک از اجزای ساختار تا کجاست.
اما class رو میشه گفت هم structre هست هم کد که میتونید بهش مجوز دسترسی هم بدید به قسمتهایی از کلاس رو بدید مثلا بگید نمیخواهید یک فیلد در جای دیگه مستقیما مورد دسترسی اعمال بشه و یا ...
تفاوت اصلی کلاس و ساختار رو میشه در سازنده و مخرب دانست و اساس مخرب و سازنده هم بر میگرده به آغازش و مقدار دهی اولیه به فیلدها و همچنین تخزیب و آزاد سازی منبع در اخر کار .



متاسفانه ۱۰۰٪ غلطه.
راجع به object pinning و .net class structure تخقیق کنید.


برای این که به باز علمی این پست اضافه بشه:
class ها همیشه by reference هستند ولی struct ها by value.برای اینکه struct ها رو by reference پاس بدید باید از pointer ها و unsafe code استفاده کنید.

Mehdi Naderi
جمعه 07 بهمن 1390, 00:22 صبح
هر چند مدت زیادی از ایجاد این تاپیک گذشته ولی چون این سوال قبلا برای خودم پیش اومده به صورت کامل تر میگم

1- ساختارنوع مقداری و کلاس ارجاعی است
2- از نظر ذخیره سازی ساختار در حافظه پشته و کلاس در حافظه هیپ قرار میگیرند
3- کلاس میتواند سازنده پیش فرض داشته باشد ولی ساختار خیر

برای مثال اگر یک ساختار زیر رو داشته باشیم





public struct Student

{
publicint ID;

publicstring strName;

publicstring strLastName;

publicDateTime BirthDate;

publicstring Address;

publicdouble Mean;

}



اگر سعی کیند سازنده پیش فرض برای این ساختار تعریف کنید کامپایل نمیشه



//خطا

public Student() { };

این خطا به این خاطر است که کامپایلر همیشه خود یک سازنده پیش فرض تولید میکنه در یک کلاس در صورتی سازنده پیش فرض تولید میشه که شما آن را ننوشته باشید


4- فیلدهای نمونه ای در نقاط تعریفشان درداخل کلاس میتوانید مقداردهی کنید ولی در ساختار خیر
5 - مهمترین تفاوت در ارث بری است یک کلاس میتواند از کلاس پایه ارث بری کند ولی یک ساختار نمیتواند

gerdioz
جمعه 07 بهمن 1390, 10:08 صبح
سلام دوستان
کلاس مخرب داره و سازنده نداره
در کلاس میتونید متغییر ها رو مقدار دهی کنید اما در سازه خیر
در کلاس متد شارنده میتونه پارامتر نگیره اما در سازنده باید حتما بگبره
در سازنده سازه از سازه نمیتونه وراثت داشته باشه اما در کلاس اینچنین نیست
موفق باشید

Parham.D
شنبه 08 بهمن 1390, 08:07 صبح
ببخشید مخرب در کلاس یعنی چی؟

senaps
شنبه 08 بهمن 1390, 10:52 صبح
ببخشید مخرب در کلاس یعنی چی؟



واحد های حافظه ای که در اختیار اعظای کلاس قرار گرفته رو با یه مخرب از بین می بریم!!! مثل سازنده ی کلاس هستش....فقط کارش اینه که اون توابع و حافظه ی اشغال شده توسط اونها رو از بین میبره!