آموزش سي شارپ - قسمت يازدهم

قبل از هر چيز بايد به همه دوستانم شهادت امام حسين(ع) و يارانش رو تسليت عرض كنم و اميدوارم كه منم دعا كنين.

حالا كه در مورد Constrcutor ها و Method ها صحبت كرديم مي تونيم بگيم كه تا حدودي كلاس ها رو شناختيم و حالا مي تونيم ادامه مطالبمون در رابطه با Value Type ها رو پيش ببريم:

Structures in CSharp
Structure ها نوع هاي داده اي هستند شبيه به كلاس ها به اين معنا كه مي توانند Field و Method و Constructor داشته باشند و حتي در بعضي از موارد به خاطر نوع رفتاري كه Value Type ها دارند به جاي كلاس ها استفاده شوند. براي تعريف يك Structure كافيست در جايي از namespace با استفاده از keyword ي كه به همين منظور ايجاد شده است يعني struct شروع به ايجادش نمائيم:

public struct Teacher
{
public int Age;
public string Name;
public void Print()
{
Console.WriteLine("Name: {0}, Age: {1}",Name, Age);
}
}

همانطور كه مي بينيم ساختار ظاهري Struct ها كاملا شبيه به كلاس است اما تفاوت اصلي آن ها در رفتارهايشان مي باشد.

در تعريف رفتار هاي كلاس گفتيم وقتي شما يك شيء از نوع يك كلاس مثل Person ايجاد مي كنين و بعد از آن شيء كپي تهيه مي كنين فقط آدرس حافظه شيء قبلي به شيء جديد اختصاص يافته و در حقيقت شما فقط يك شيء داريد.
اما در مورد Struct ها جريان كاملا شبيه به كپي گرفتن از تايپ هاي بدوي (Primitive Types) ها مي باشد. به چند خط كد زير دقت كنين:

Teacher t = new Teacher();
t.Name = "Ali";
t.Age = 44;

Teacher t2 = t;
t2.Name = "Reza";

t.Print();
t2.Print();

به نظر شما خروجي اين چند خط كد چيست؟
به اشكال زير دقت كنين:




نكته بسيار مهم در شكل اول اينست كه اصولا به خاطر Value Type بودن Struct ها هيچ شيء اي در حافظه Heap ايجاد نشده است و فقط دو متغيير در حافظه Stack ايجاد شده است. نكته مهم دوم اينه كه وقتي شما از يك متغيير از نوع Struct كپي مي گيرين تمامي مقادير موجود در آن Struct كپي شده و در متغيير جديد يك كپي از آن مقادير قرار خواهد گرفت. پس در نتيجه تغييراتي كه ما در متغيير دوم يعني t2 داديم برروي متغيير اول يا همان t تاثيري نخواهد داشت.


Constructors in Structures - سازنده ها در ساختار ها

نكته مهم ديگري كه مي توان در مورد Struct ها بيان كرد در مورد سازنده ها در اين جنس است. در پست قبلي در مورد ايجاد سازنده ها در كلاس ها صحبت كرديم و گفتم كه شما مي توانين ورژن هاي مختلفي از سازنده ها را در يك كلاس داشته باشين. اما بايد بگويم كه در مورد Struct ها جريان كمي متفاوت خواهد بود.
نكته اول: شما سازنده پيشفرض را در Struct ها دارين اما امكان تايپ كردن آن را به صورت دستي ندارين. به اين معني كه اگر شما يك Constructor بدون پارامتر در يك Struct تعريف كنين به Compile Time Error بر خورد خواهيد كرد و در حقيقت شما نمي تونين هيچ تغييري در رفتار سازنده پيشفرض Struct ها ايجاد كنين. بايد بدونين كه سازنده پيش فرض در Structureها در حقيقت يك object ايجاد نمي كند بلكه به تمامي متغييرهايي كه داخل Struct شما وجود دارند مقدار پيش فرض را Set مي كند.
Teacher t = new Teacher();
در نتيجه كد بالا فيلد Age مقدار 0 و فيلد Name مقدار "" را كه مقادير پيشفرض int و String هستند را خواهند گرفت.
نكته دوم: در تمامي ورژن هاي سازنده ها بايد تمامي متغيير هاي Struct شما مقدار دهي شوند. در غير اينصورت بازهم Compile Time Error خواهين داشت.
در نتيجه Struct شما مي تواند به اين شكل باشد:

public struct Teacher
{
public int Age;
public string Name;

public void Print()
{
Console.WriteLine("Name: {0},Age: {1}",Name,Age);
}

public Teacher(int age, string Name)
{
Name = name;
Age = age;
}
public Teacher(int age)
{
Age = age;
Name = "";
}
}

ادامه دارد...

مقاله اول من براي aspalliance.com

امروز اولين مقاله من براي وب سايت aspalliance.com منتشر شد.
مقاله در مورد روش پيدا سازي Single Sign-On است. به اين ترتيب كه شما با استفاده Membership Provider ASP .NET چندين وب سايت را با يك Login Page امن كنيد.

مي تونين اين مقاله رو در اين آدرس پيدا كنين و باعث خوشحالي من خواهد بود اگر نظراتتون رو برام بنويسين.

http://aspalliance.com/1545_Understanding_Single_SignOn_in_ASPNET_20