معرفی متدهای String در سی شارپ - بخش دوم
آموزش سی شارپ

معرفی متدهای String در سی شارپ - بخش دوم

در این پست در ادامه پست قبلی معرفی متدهای String در سی شارپ - بخش اول  ، ادامه معرفی متد های رشته ها در سی شارپ را یاد می گیریم.

متد Clone :

Clone کردن در برنامه نویسی برای اشیا است که دارای اینترفیس ICloneable باشند. اصولا عملیات Clone کردن یعنی کپی کردن تمام خصوصیات یک شی همراه با اشاره ان  شی هست. 

کار این متد کپی کردن همه ی خصوصیات یک شی به یک نمونه ی جدید از آن است.

static void Main(string[] args)
        {
            string strName = "wildcoder.ir";
            string alias = (string)strName.Clone();
            Console.WriteLine(alias);
        }

در نظر داشته باشید که در حالت عادی از این متد استفاده نمی شود و برای اشیائی است که دارای انواع مختلفی هستند و در آن شی اینترفیس ICloneable پیاده سازی شده باشد.

   //
        // Summary:
        //     Returns a reference to this instance of System.String.
        //
        // Returns:
        //     This instance of System.String.
        public object Clone()
        {
            return this;
        }

متد Compare :

از متد Compare برای مقایسه دو رشته استفاده می شود. مقدار خروجی این رشته یه مقدار int است و بسته به وضعیت رشته های ورودی متد این عدد متفاوت هست.

  • مقدار 0 : یعنی رشته a به ترتیب مرتب سازی در همان موقعیت رشته b قرار می گیرد.
  • مقدار 1 : یعنی رشته a به ترتیب مرتب سازی بعد از موقعیت رشته b است.
  • مقدار -1 : یعنی رشته a به ترتیب مرتب سازی قبل از رشته b قرار می گیرد.

این مقایسه بر اساس موقعیت رشته هست ، به طور مثال :

string a = "a";
string b  = "b";
Console.WriteLine(string.Compare(a,b));

مقدار خروجی این رشته -1 است . این مقایسه بر اساس  موقعیت‌های نسبی رشته‌ها به ترتیب مرتب‌شده است و برای تساوی دو رشته استفاده نمی شود.

متد Contains :

از این متد معمولا برای جستجوی یک رشته یا کاراکتر در یک عبارت استفاده می شود . به مثال زیر توجه کنید :

 static void Main(string[] args)
        {
            string a = "wildcoder.ir";
            Console.WriteLine(a.Contains("wild")); // return True
            Console.WriteLine(a.Contains('w')); // return True
            Console.WriteLine(a.Contains('s')); // return False
            Console.ReadLine();
        }

متد Copy :

این متد یک نمونه جدید از string ایجاد میکند و مقدار را رشته اصلی را در آن قرار میدهد. از نظر ظاهری شاید مشابه متد Clone باشد ولی کمی متفاوت عمل می کند. اگر کمی عمیق تر به قضیه نگاه کنیم می توانیم با کمی گشت و گذار در document و توضیحاتی که داده شده در مورد متد های Copy  و Clone ف متوجه شویم که :

متد Clone : دقیقا همان نمونه اولیه از رشته اصلی را در یک متغیر قرار می دهد که اشاره گر آن هم در متغیر دوم کپی می شود . یعنی هر دو متغیر به یک خانه از حافظه اشاره میکنند.

متد Copy  : یک نمونه جدید ایجاد می کند و مقدار متغیر اصلی را در نمونه جدید قرار می دهد. یعنی ادرس های این دو نمونه متفاوت هست . 

برای اینکه این موضوع رو بهتر متوجه بشیم یک مثال می زنیم.

            string a = "wildcoder.ir";
            string b = string.Copy(a);
            var c = a.Clone();


            GCHandle handle = GCHandle.Alloc(a, GCHandleType.Pinned);
            GCHandle handleb = GCHandle.Alloc(b, GCHandleType.Pinned);
            GCHandle handlec = GCHandle.Alloc(c, GCHandleType.Pinned);
            Console.WriteLine($"Address a: 0x{handle.AddrOfPinnedObject():X}");
            Console.WriteLine($"Address b: 0x{handleb.AddrOfPinnedObject():X}");
            Console.WriteLine($"Address c: 0x{handlec.AddrOfPinnedObject():X}");

            handle.Free();
            handleb.Free();
            handlec.Free();
            Console.ReadLine();

خروجی تکه کد بالا به شکل زیر است : 

متغیر a رشته اصلی ما هست و متغیر b را با استفاده از متد Copy ایجاد کرده ایم . همانطور که می بینید ادرس خانه حافظه این دو متغیر متفاوت است .

متغیر c را با استفاده از متد clone از متغیر a مقدار دهی کرده ایم . و می بیند که نتیجه ی Clone کردن یک متغیر ، دقیقا همان نمونه ی اولیه ای هست که در ابتدا ایجاد کرده ایم یعنی همان a  و ادرس های خانه حافظه ای که a و c به ان اشاره می کنند هم مشابه هست.

متد CopyTo :

این متد برای کپی کردن تعداد مشخصی از یک رشته در یک ارایه ای از نوع char است . یعنی چی ؟

خب با یک مثال بهتر توضیخ بدیم :

string a = "wildcoder.ir";
char[] b = new char[1000];
a.CopyTo(2, b, 996, 4);
Console.WriteLine(b);
Console.ReadLine();

ما رشته ای داریم به نام a .

یک ارایه از جنس char هم به نام b تعریف کرده ایم. 

پارامتر های ورودی متد CopyTo :

پارامتر اول از نوع int : میگه از کدوم اندیس از رشته ی a شروع کنم .

پارامتر دوم ارایه ای از char هست که ما قبلا تعریف کردیم به نام b .

پارامتر سوم از نوع int : میگه کاراکتر های جدا شده از رشته a برای قرار گرفتن در ارایه b ، از کدام اندیس شروع شود.

پارامتر سوم از نوع int : تعداد کاراکترهایی که قرار است از رشته اصلی یعنی a در اندیس مشخص شده از ارایه b قرار بگیرد را مشخص میکند.

در مثال بالا  گفتیم از خانه 996 ام ارایه b شروع کن و به تعداد 4 کاراکتر از اندیس 2 ام رشته a کپی کن در ارایه b.

نتیجه کار : 

به تصویر زیر توجه کنید : 

تگ های مرتبط

نویسنده

یاسر دهقان

تاریخ نگارش
11 بهمن 1402
18 مقاله این نویسنده