کلمه کلیدی this به نمونه فعلی کلاس رجوع می کند و همچنین به عنوان اصلاحگر اولین پارامتر یک متد الحاقی (Extension Method) کاربرد دارد.

نکته

این تاپیک فقط کاربرد کلیدواژه this با نمونه های کلاس را توضیح می دهد. در مورد متدهای الحاقی بطور خلاصه باید بگویم که : متدهای الحاقی به شما این امکان را می دهند که متد ها را به نوع های موجود "اضافه" کنیم ، بدون اینکه یک نسخه مشتق شده جدید از آن نوع بسازیم ، بدون نیاز به کامپایل مجدد و یا حتی ویرایش نوع اصلی. متدهای الحاقی ، نوع خاصی از متدهای ایستا هستند، اما بگونه ای فراخوانی می شوند که انگار متد نمونه آن نوع الحاقی می باشند. برای کد نوشته شده در #C هیچ تفاوت آشکاری بین فراخوانی یک متد الحاقی و متدهایی که واقعا" در داخل نوع اعلان شده اند وجود ندارد. مشهورترین متدهای الحاقی ، عملگرهای پرس و جوی استاندارد LINQ می باشند که قابلیت های پرس و جو را به نوع های IEnumerable و <IEnumerable<T موجود اضافه می کنند. برای استفاده از عملگرهای پرس و جوی استاندارد، اول آنها را با استفاده از رهنمون using System.Linq به داخل حوزه (scope) بیاورید. از جمله متدهای الحاقی LINQ می توان به GroupBy ، OrderBy و Average اشاره کرد که پس اضافه کردن رهنمون فوق الذکر به نوع شمارشی IEnumerable اضافه می شوند.

موارد زیر کاربردهای معمول کلمه کلیدی this است:

  • کنترل اعضایی که توسط نام های مشابه اعضای دیگر از دید مخفی شده اند، برای مثال:
    public Employee(string name, string alias)
    {
        // Use this to qualify the fields, name and alias:
        this.name = name;
        this.alias = alias;
    }
  • برای پاس دادن یک شیئ بصورت پارامتر به متدهای دیگر، برای نمونه:
    CalcTax(this);
  • برای اعلان شاخصگرها، برای مثال:
    public int this[int param]
    {
        get { return array[param]; }
        set { array[param] = value; }
    }

توابع ایستای عضو، به این دلیل که در سطح کلاس موجود هستند و به عنوان قسمتی از یک شیئ محسوب نمی شوند ، دارای اشاره گر this نیستند.

مثال

در این مثال، از this برای کنترل name و alias (اعضای کلاس Employee) که توسط نام های مشابه مخفی شده اند، استفاده شده است. کلمه کلیدی this همچنین برای پاس دادن یک شیئ به متد CalcTax که وابسته به کلاس دیگری است، استفاده شده.

class Employee
{
    private string name;
    private string alias;
    private decimal salary = 3000.00m;

    // Constructor:
    public Employee(string name, string alias)
    {
        // Use this to qualify the fields, name and alias:
        this.name = name;
        this.alias = alias;
    }
    // Printing method:
    public void printEmployee()
    {
        Console.WriteLine("Name: {0}\nAlias: {1}", name, alias);
        // Passing the object to the CalcTax method by using this:
        Console.WriteLine("Taxes: {0:C}", Tax.CalcTax(this));
    }

    public decimal Salary
    {
        get { return salary; }
    }
}

class Tax
{
    public static decimal CalcTax(Employee E)
    {
        return 0.08m * E.Salary;
    }
}

class MainClass
{
    static void Main()
    {
        // Create objects:
        Employee E1 = new Employee("Mingda Pan", "mpan");

        // Display results:
        E1.printEmployee();
    }
}
/*
Output:
    Name: Mingda Pan
    Alias: mpan
    Taxes: $240.00
*/



برگرفته شده از butterfly.blog.ir