زبان سی شارپ دارای نوع داده ای به نام struct است که همچون یک ظرف ، مجموعه ای از متغیر های بهم مرتبط را میتوان در آن قرار داد. این نوع بسیار شبیه به کلاس هاست اما دارای محدویت های بیشتری نسبت به کلاس هاست. در این فصل با struct ها در زبان سی شارپ آشنا میشویم.
ساختارها
struct
در زبان سی شارپ یک نوع value type
محسوب میشود. وقتی یک struct ایجاد میشود متغیرهایی که در آن تعریف می شوند مقدار واقعی داده ها را نگهداری می کنند. وقتی struct به یک متغیر جدید انتساب داده می شود مقداری کپی از آن در متغیر جدید قرار میگیرد. این موضوع نشان دهنده این است که ساختار یک value type است.
برای تعریف یک ساختار از کلمه کلیدی struct
استفاده می کنیم.ساختار ها همچون یک ظرف تعدادی متغیر مرتبط به هم را در خود نگه میدارند. نمونه مثال زیر نحوه تعریف یک ساختار را نشان میدهد :
public struct PostalAddress
{ // Fields, properties, methods and events go here...
}
یک مثال کامل تر از تعریف یک struct
را در زیر مشاهده می کنید :
public struct CoOrds
{ public int x, y;
public CoOrds(int p1, int p2) { x = p1; y = p2; }
}
ساختارها از جهاتی بسیار شبیه کلاس ها هستند. البته آنها نسبت به کلاس ها بسیار محدودتر بوده و البته سریع تر هستند.
نکاتی در مورد struct ها
به چند نکته مهم از ساختار ها توجه کنید :
- در ساختارها فیلد ها نمی توانند مقداردهی اولیه شوند. فقط در صورتی که فیلد ها
const
و یاstatic
تعریف شوند می توانند مقداردهی اولیه شوند. - یک ساختار نمی تواند همچون کلاس ها دارای سازنده پیش فرض باشد (منظور از سازنده های پیش فرض، سازنده هایی هستند که هیچ پارامتری ندارند).
- ساختارها در هنگام انتساب به یک متغیر جدید کپی می شوند. در واقع آنها
value type
هستند و این برخلاف کلاس هاست کهreference type
هستند. - برخلاف کلاسها ، ساختار ها می توانند بدون کلمه کلیدی
new
مقدار دهی اولیه شوند. - ساختار ها می توانند دارای سازنده های پارامتر دار باشند. یک ساختار نمیتواند از ساختار و یا کلاسی دیگر ارث بری کند.
- ساختار ها می توانند اینترفیس ها را پیاده سازی کنند.
چند مثال از ساختار ها
نمونه مثال زیر تعریف و مقدار دهی ساختارها را با سازنده های مختلف نشان می دهد :
public struct CoOrds
{ public int x, y;
public CoOrds(int p1, int p2) { x = p1; y = p2; }
}
اکنون در برنامه از ساختار بالا استفاده میکنیم :
// Declare and initialize struct objects.
class TestCoOrds
{ static void Main() { // Initialize: CoOrds coords1 = new CoOrds(); CoOrds coords2 = new CoOrds(10, 10);
// Display results: Console.Write("CoOrds 1: "); Console.WriteLine("x = {0}, y = {1}", coords1.x, coords1.y);
Console.Write("CoOrds 2: "); Console.WriteLine("x = {0}, y = {1}", coords2.x, coords2.y);
// Keep the console window open in debug mode. Console.WriteLine("Press any key to exit."); Console.ReadKey(); }
}
/* Output: CoOrds 1: x = 0, y = 0 CoOrds 2: x = 10, y = 10 */
نمونه مثال زیر یک ویژگی از ساختار ها را نشان میدهد که منحصر به آنهاست. در نمونه مثال زیر شی CoOrds
بدون استفاده از مقدار new
ایجاد شده است :
public struct CoOrds
{ public int x, y;
public CoOrds(int p1, int p2) { x = p1; y = p2; }
}
// Declare a struct object without "new."
class TestCoOrdsNoNew
{ static void Main() { // Declare an object: CoOrds coords1;
// Initialize: coords1.x = 10; coords1.y = 20;
// Display results: Console.Write("CoOrds 1: "); Console.WriteLine("x = {0}, y = {1}", coords1.x, coords1.y);
// Keep the console window open in debug mode. Console.WriteLine("Press any key to exit."); Console.ReadKey(); }
}
// Output: CoOrds 1: x = 10, y = 20