در این مقاله، از سری مقالات آموزشی پی استور، به تفاوت String و StringBuilder در سی شارپ #C، موارد استفاده مناسب آنها و ارائه مثالهایی برای توضیح نحوه استفاده از آنها میپردازیم.
مقدمه
در زبان برنامهنویسی سیشارپ، رشتهها یکی از پرکاربردترین نوع دادهها هستند. NET framework. دو کلاس اصلی برای کار با رشتهها ارائه میدهد: string و StringBuilder. اگرچه هر دو برای مدیریت دادههای متنی استفاده میشوند، اما ویژگیها و تأثیرات عملکردی متفاوتی دارند.
String یک نوع داده غیرقابل تغییر «Immutable» است، به این معنا که هرگونه تغییر در مقدار آن منجر به ایجاد یک شیء جدید میشود. این ویژگی باعث میشود عملیاتهای مکرر بر روی رشتهها هزینهبر باشد، زیرا برای هر تغییر حافظه جدیدی تخصیص مییابد.
از سوی دیگر، StringBuilder یک نوع داده قابل تغییر «Mutable» است که به کاربر اجازه میدهد بدون ایجاد شیء جدید، رشتهها را تغییر دهد. این ویژگی آن را برای عملیاتهای مکرر و سنگین بر روی رشتهها به گزینهای بهینهتر تبدیل میکند.
برای مطالعه بیشتر در مورد StringBuilder . مقاله ما با موضوع کلاس StringBuilder در سی شارپ را مطالعه کنید.
تمام عملکردهای StringBuilder توسط کلاس StringBuilder که در فضای نام System.Text قرار دارد، ارائه میشود. انتخاب بین String و StringBuilder به عوامل مختلفی از جمله حجم دادهها، تعداد تغییرات و اهمیت عملکرد بستگی دارد.
String در مقابل StringBuilder در سی شارپ
در سیشارپ، String و StringBuilder هر دو برای کار با رشتهها استفاده میشوند، اما تفاوتهای مهمی بین آنها وجود دارد که عملکرد و کارایی کد را تحت تأثیر قرار میدهد.
اگر نیاز به تغییرات مکرر در رشتهها دارید، استفاده از StringBuilder به دلیل کارایی بهتر توصیه میشود. در غیر این صورت، اگر رشتهها ثابت یا کمی تغییر میکنند، String میتواند انتخاب سادهتری باشد.
ویژگی | String | StringBuilder |
تغییرپذیری | تغییرناپذیر (بعد از ایجاد قابل تغییر نیست) | قابل تغییر (بدون ایجاد اشیاء جدید قابل تغییر است) |
عملکرد | برای تغییرات مکرر کندتر است | برای تغییرات مکرر سریعتر است |
استفاده از حافظه | برای هر تغییر یک شی جدید ایجاد می کند | همان شی را تغییر می دهد و سربار حافظه را کاهش می دهد |
استفاده از مورد | برای رشته های کوچک یا به ندرت اصلاح شده استفاده کنید | برای رشته های بزرگ یا اغلب اصلاح شده استفاده کنید |
روش های اصلاح | اصلاح نیاز به ایجاد یک رشته جدید دارد | اصلاح در محل انجام می شود |
ایمنی موضوع | رشته ها از نظر موضوع ایمن هستند | StringBuilder ذاتاً ایمن نیست |
مثال نشان دادن تفاوت String و StringBuilder در سی شارپ
قطعه کد زیر نشان میدهد که چگونه عملکرد String و StringBuilder در سیشارپ در عملیات الحاق رشتهها متفاوت است.
// Difference between String Vs StringBuilder using System; using System.Text; using System.Collections; class PStore { // Concatenates to String public static void concat1(String s1) { // taking a string which // is to be Concatenate String st = "Store"; // using String.Concat method // you can also replace it with // s1 = s1 + "Store"; s1 = String.Concat(s1, st); } // Concatenates to StringBuilder public static void concat2(StringBuilder s2) { // using Append method // of StringBuilder class s2.Append("Store"); } // Main Method public static void Main(String[] args) { String s1 = "Program"; concat1(s1); // s1 is not changed Console.WriteLine("Using String Class: " + s1); StringBuilder s2 = new StringBuilder("Program"); concat2(s2); // s2 is changed Console.WriteLine("Using StringBuilder Class: " + s2); } }
توضیحات:
- استفاده از متد concat1: در این متد، یک رشته با مقدار Program ارسال شده و عملیات ;s1 = String.Concat(s1, st) انجام میشود، جایی که st مقدار Store برای الحاق شدن دارد. رشتهای که از متد ()Main ارسال شده است تغییر نمیکند، زیرا رشته در #C غیرقابل تغییر «Immutable» است. تغییر مقدار رشته منجر به ایجاد یک شیء جدید میشود و s1 در متد ()concat1 مرجع شیء رشته جدید را ذخیره میکند. اما مرجعهای s1 در ()Main و ()concat1 به رشتههای متفاوتی اشاره دارند.
- استفاده از متد concat2: در این متد، یک رشته با مقدار Program ارسال شده و عملیات s2.Append(“Store”) انجام میشود که مقدار واقعی رشته (در Main) را به ProgramStore تغییر میدهد. این به دلیل این واقعیت ساده است که StringBuilder قابل تغییر «Mutable» است و بنابراین مقدار آن تغییر میکند.
خروجی
Using String Class: Program Using StringBuilder Class: ProgramStore
توضیح نهایی: در مثال بالا تفاوت String و StringBuilder در سی شارپ در هنگام انجام عملیاتهای الحاق رشتهها «concatenation» نشان داده شده است:
- در استفاده از String، هر بار که تغییری اعمال میشود، یک شیء جدید ایجاد میشود و متغیر اصلی تغییر نمیکند.
- در استفاده از StringBuilder، تغییرات مستقیماً بر روی همان شیء اعمال میشوند، بدون اینکه شیء جدیدی ایجاد شود.
این کد به وضوح نشان میدهد که در صورت نیاز به انجام تغییرات مکرر یا پیچیده روی رشتهها، استفاده از StringBuilder بهینهتر است.
تبدیل String به StringBuilder در سی شارپ
برای تبدیل یک شیء از کلاس String به کلاس StringBuilder، کافی است شیء رشته را به سازنده کلاس StringBuilder ارسال کنید.
مثال: قطعه کد زیر نمونهای از تبدیل یک شیء String به StringBuilder در زبان سیشارپ را نشان میدهد.
// Conversion from String to StringBuilder. using System; using System.Text; class PStore { // Main Method public static void Main(String[] args) { String str = "Program"; // conversion from String object // to StringBuilder StringBuilder sbl = new StringBuilder(str); sbl.Append("Store"); Console.WriteLine(sbl); } }
خروجی
ProgramStore
توضیح: مثال بالا نشان میدهد که چگونه میتوان یک شیء String را به یک شیء StringBuilder تبدیل کرد. پس از تبدیل، با استفاده از متد Append، یک رشته جدید به انتهای رشته قبلی اضافه میشود. این مثال به وضوح نشان میدهد که چگونه میتوان با استفاده از StringBuilder تغییرات مکرر و بهینهای بر روی رشتهها انجام داد.
تبدیل StringBuilder به String در سی شارپ
این تبدیل با استفاده از متد ()ToString قابل انجام است.
مثال: قطعه کد زیر نمونهای از تبدیل یک شیء StringBuilder به String در زبان سیشارپ را نشان میدهد.
// Conversion from String to StringBuilder using System; using System.Text; class PStore { // Main Method public static void Main(String[] args) { StringBuilder sbdr = new StringBuilder("Builder"); // conversion from StringBuilder // object to String using ToString method String str1 = sbdr.ToString(); Console.Write("StringBuilder object to String: "); Console.WriteLine(str1); } }
خروجی
StringBuilder object to String: Builder
توضیح: کد بالا نشان میدهد که چگونه میتوان یک شیء StringBuilder را به یک String تبدیل کرد. متد ()ToString این تبدیل را انجام میدهد و رشته حاصل از آن در متغیر str1 ذخیره میشود.
زمان استفاده از String و StringBuilder
زمان استفاده از String:
- اگر رشته شما کوتاه و سبک باشد، استفاده از نوع string ساده و مناسب است.
- اگر نیاز به تغییرات مکرر در محتوای رشته ندارید، string انتخاب خوبی است.
- به مجموعه گستردهای از متدهای دستکاری رشته که توسط کلاس string ارائه میشود، نیاز دارید.
زمان استفاده از StringBuilder:
- برای رشتههای طولانی که حافظه بیشتری مصرف میکنند، استفاده از StringBuilder عملکرد بهتری ارائه میدهد.
- اگر رشته نیاز به تغییرات یا عملیات متعددی مانند الحاق، حذف، یا درج در طول زمان دارد، StringBuilder انتخاب بهتری است زیرا از ایجاد نمونههای متعدد جلوگیری میکند.
- در مواردی که در یک حلقه باید رشتهها را الحاق یا ویرایش کنید، StringBuilder میتواند عملکرد را بهبود بخشد و از سربار ناشی از تخصیص مجدد حافظه جلوگیری کند.
نتیجه گیری
درک تفاوت String و StringBuilder در سی شارپ برای دستکاری کارآمد رشتهها بسیار مهم است. اگرچه هر دو ابزار برای کار با رشتهها استفاده میشوند، اما در طراحی و کاربرد تفاوتهای اساسی دارند.
String برای مدیریت دادههای متنی که تغییرات کمی دارند یا ثابت هستند مناسب است، زیرا ویژگی غیرقابل تغییر بودن آن امنیت و سادگی بیشتری را فراهم میکند. با این حال، برای عملیاتهای مکرر یا پیچیده بر روی رشتهها، استفاده از StringBuilder توصیه میشود. این ابزار به دلیل قابل تغییر بودن، کارایی بیشتری ارائه میدهد و از ایجاد اشیاء غیرضروری جلوگیری میکند.
در نهایت، انتخاب مناسب باید با توجه به نیازهای خاص پروژه و حجم عملیاتهای مرتبط با رشتهها انجام شود. با درک دقیق تفاوت String و StringBuilder در سی شارپ، توسعهدهندگان میتوانند تصمیمهای بهتری برای بهبود عملکرد و بهرهوری برنامههای خود اتخاذ کنند.