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

و وقتي مقدار قبلي را با مقدار جديد "Reza" جمع مي كنين يك شيء كاملا جديد در حافظه ايجاد مي شود. و شيء قبلي توسط Garbage Colletion از حافظه پاك خواهد شد.

نوع داده اي رشته اي نيز يكي از مهم ترين نوع هاي داده ايست كه در اين گروه قرار مي گيرد(Reference Types). براي ايجاد يك متغيير از نوع داده اي رشته اي مي توانيم از نمونه كد زير استفاده كنيم:
string myName = "Ali";
همانطور كه در كد بالا مشاهده مي كنيد براي مقدار دهي يك متغيير از نوع داده اي رشته اي كافيست مقدار مورد نظرمان را داخل دو علامت "" قرار داده و با استفاده از = مقدار دهي را انجام دهيم.
myName += "Reza";
با توجه به كد بالا مقدار myName با استفاده از operation += كه در حقيقت مقدار قبلي را + مقدار جديد كرده و مقدار دهي مي نمايد از Ali به AliReza تغيير يافت. البته شما مي توانستيد اين كد را به صورت زير نيست بنويسيد:
myName = myName + "Reza";
البته دليل ذكر مثال با روش استفاده از =+ نيست بلكه مي خواهم در مورد رفتار كلاس string كمي توضيح دهم.
در حقيقت كلاس string يك كلاس از نوع Reference Type هاست اما به دليل استفاده بسيار زيادش در زبان هاي برنامه نويسي مايكروسافت روش استفاده از آن را با استفاده keyword ي با همان نام و با حروف كوچك يعني string آسانتر و به روش value type ها نموده است. به عبارت ديگر وقتي شما مي نويسيد:
string myName = "ali";
در واقع كامپايلر يك شيء از نوع string در حافظه Heap براي شما ايجاد مي كند:و وقتي مقدار قبلي را با مقدار جديد "Reza" جمع مي كنين يك شيء كاملا جديد در حافظه ايجاد مي شود. و شيء قبلي توسط Garbage Colletion از حافظه پاك خواهد شد.
با توجه به نكته بالا اگر در شرايطي نياز داشتيد تا يك متن را مرتبا تغيير دهيد بهترين روش استفاده از string ها نخواهد بود. چرا كه هر چه تعداد دفعات تغيير متن شما بيشتر باشد به همان ميزان تعداد object هاي ساخته شده در حافظه Heap نيز زياد خواهد شد (البته كه Garbage Collection آن ها را حذف خواهد كرد) اما بهتر از كلاس ديگري به نام StringBuilder براي اين موضوع استفاده شود. تا به بهترين نحو از حافظه سيستم استفاده كنيم. كلاس StringBuilder در namespace System.Text قرار گرفته است و براي استفاده از آن بايد يك شيء از آن بسازيم:
متد ()ToString
! دقت داشته باشين كه متد ToString از كلاس object به تمامي كلاس هاي دات نت به ارث مي رسد. در نتيجه ميتوانيد از اين متد هر جا كه به شكل رشته اي يك شيء نياز داشتين استفاده كنين:
به عنوان مثال وقتي از شيء اي از كلاس Person را ToString كنيم (يا هر كلاسي كه شما ايجاد كرده باشيد) به صورت پيشفرض خروجي ToString آن اسم كامل (Qualified Name) آن خواهد بود:
StringBuilder st = new StringBuilder();
و بعد مي توانيم با استفاده از متد Append متن مورد نظرمان را به آن اضافه كنيم:st.Append("Ali");
st.Append("Reza");
string Name = st.ToString();
رفتار StringBuilder برخلاف رفتار String مي باشد و به اين ترتيب خواهد بود كه در ابتدا مثلا 16 بايت حافظه براي خودش در نظر خواهد گرفت. وقتي نصف اين 16 بايت پر شده (با استفاده از دستور Append - يعني 8 بايت) آنوقت خودش به صورت اتوماتيك يك شيء جديد خ با دو برابر اندازه فعلي در حافظه خواهد ساخت (يعني 32 بايت) سپس مقادير قبلي را داخل اين شيء جديد كپي مي گيرد. و باز وقتي نصف اين 32 بايت پر شد به همين ترتيب عمل خواهد كرد. نتيجتا به صورت تساعدي اين مقدار حافظه بيشتر مي شود و در نتيجه تعداد اشيايي كه در حافظه ساخته مي شوند كمتر و كمتر خواهد بود و در نتيجه سرعت عملكرد آن به مراتب سريعتر خواهد بود.متد ()ToString
! دقت داشته باشين كه متد ToString از كلاس object به تمامي كلاس هاي دات نت به ارث مي رسد. در نتيجه ميتوانيد از اين متد هر جا كه به شكل رشته اي يك شيء نياز داشتين استفاده كنين:
int i = 12;
int j = 32;
string myResult = (i * j).ToString();
به عنوان مثال وقتي از شيء اي از كلاس Person را ToString كنيم (يا هر كلاسي كه شما ايجاد كرده باشيد) به صورت پيشفرض خروجي ToString آن اسم كامل (Qualified Name) آن خواهد بود:
Person p = new Person();
p.Name = "Ali";
p.Age = 20;
Console.WriteLine(p.ToString());
ادامه دارد...
+ نوشته شده در جمعه پنجم بهمن ۱۳۸۶ ساعت 15:51 توسط مسعود طباطبايي | MasoudTB
|