PDA

View Full Version : استفاده از چنین ساختاری در برنامه درست است؟ (struct بجای class)



man_iran
جمعه 08 بهمن 1389, 16:13 عصر
فرض کنید قراره برنامه کتابخانه را بصورت سه لایه طراحی کنید حالا چندین شی دارید مثلا: کتاب، کاربر و...
باید برای هر کدام یک کلاس ایجاد کرد و خصوصیات آنها را توش گذاشت. توی هر دو لایه (BL و DAL).

حالا سوال: می شه بجای کلاس برای هر شی، struct ایجاد کرد؟ تاجایی که می دونم struct سریعتر از کلاس عمل می کنه ولی محدودیت هایی داره مثلا به ارث نمیرند. فکر نکنم هم اکثر شی ها نیاز به وراثت داشته باشند برای شی های پدر هم از کلاس استفاده می کنم.
چنین ساختاری درسته؟

ACorvinus
جمعه 08 بهمن 1389, 16:30 عصر
سلام.

تا جایی که من میدونم ساختارها Value-Type هستند ولی کلاس ها Reference-Type. هر بار بخواین ساختاری رو به صورت آرگومان به متدی بفرستین اون ساختار کپی مجدد میشه تا بتونین از اون در متد استفاده کنین در حالی که کلاس ها چنین نیستن. ساختار ها خاصیت مشتق گیری ندارن ولی کلاس ها دارن و این مزیت بزرگیه. و کلی چیزای دیگه که در زیر به اونا اشاره کرده:

The struct type is suitable for representing lightweight objects such as Point, Rectangle, and Color. Although it is possible to represent a point as a class, a struct is more efficient in some scenarios. For example, if you declare an array of 1000 Point objects, you will allocate additional memory for referencing each object. In this case, the struct is less expensive.

It is an error to declare a default (parameterless) constructor for a struct. A default constructor is always provided to initialize the struct members to their default values.

It is an error to initialize an instance field in a struct.

When you create a struct object using the new operator, it gets created and the appropriate constructor is called. Unlike classes, structs can be instantiated without using the new operator. If you do not use new, the fields will remain unassigned and the object cannot be used until all of the fields are initialized.

There is no inheritance for structs as there is for classes. A struct cannot inherit from another struct or class, and it cannot be the base of a class. Structs, however, inherit from the base class Object. A struct can implement interfaces, and it does that exactly as classes do.

Unlike C++, you cannot declare a class using the keyword struct. In C#, classes and structs are semantically different. A struct is a value type, while a class is a reference type.


من نمیگم یکی از دیگری بهتره. بستگی داره شما عملکرد شما. اگه ساختارها کارتون رو را میندازه از ساختار استفاده کنین ولی اصول طراحی چندلایه بر پایه کلاس ها هستش.

sds1920
جمعه 08 بهمن 1389, 16:33 عصر
درست بودن یا نبودنش بستگی به موقعیت داره.
این دو همون قدری که به هم شباهت دارند تفاوت هم دارند.
توی هر دو میشه اعضا ، خاصیت ، متد و رویداد تعریف کرد .
ولی Struct معمولا برای ساختمان داده های ساده و سبک استفاده می شوند و کلاس برای ساختمانهای بزرگ.
Struct یک متغیر انتسابی ولی کلاس از نوع ارجاعی هست.به این معنی که موقعی که برای مثال یک نوع Struct را
به عنوان پارامتر به تابعی ارسال می کنید اطلاعات اون کپی می شه ولی در صورتی که از نوع کلاس باشه چه از
ref استفاده بکنید چه نکنید اشاره گر اون به تابع ارسال می شه.به همین دلیل برای ساختمان دادهای بزرگ از کلاس استفاده می شه تا
موقع فرخوانی و انتساب زمانی برای کپی کردن اطلاعات از بین نره.
از طرفی کلاس ساختار بهتر و بااصلوب تری نسبت به Struct داره.