C# では、「this」キーワードは、インスタンス メソッドまたはコンストラクター内から現在のクラスのインスタンス メンバーを参照するために使用されます。メソッド パラメーターとインスタンス変数が同じ名前である場合、それらの間の名前の曖昧さが解消されます。以下は、C# での「this」キーワードの使用例です:
説明付きの構文:
C# で 'this' キーワードを使用する構文は次のとおりです:
this.instance_variable
上記の構文では、「this」がキーワードで、instance_variable がクラスのインスタンス変数の名前です。
同じクラスのオブジェクトをパラメータとしてメソッドに渡す場合、構文は次のようになります。
method_name(this);
上記の構文では、「this」キーワードは現在のクラスのオブジェクトを指し、method_name は呼び出されるメソッドの名前です。
C# の「this」キーワードは、クラスの「this」ポインターとして使用されます。これは、クラスの現在のインスタンスを表すために使用されます。 C# では、「this」ポインターはクラスの非静的メンバーに対してのみ機能します。これは、「this」が現在のインスタンスで機能し、非静的メンバーにはクラスのインスタンスからアクセスできるためです。 「this」ポインタは、静的変数とメンバー関数に対しては機能しません。これらにアクセスするためのインスタンスは必要なく、それらはクラス レベルで存在するためです。
場合によっては、「this」キーワードを明示的に使用する必要はありません。現在のクラスのメソッドを呼び出すときと同様に、this の代わりに this.method_name() を使用します。「this」キーワードを使用せずにメソッドを直接呼び出すことができます。その場合、「this」キーワードはコンパイラによって自動的に追加されます。 .
以下に示す図を使って、上記の点を理解してみましょう。
C# では「this」キーワードを使用する方法がたくさんあります:
現在のインスタンスの変数とメンバー関数を参照するために使用されます。
コード:
using System; namespace keywords { class ThisDemo { //instance variable public string Message; public string GetMessage() { return Message; } public void SetMessage(string Message) { //"this.Message" refers to instance variable (class member) this.Message = Message; } } public class program { public static void Main() { ThisDemo obj = new ThisDemo(); obj.SetMessage("Hello world!"); Console.WriteLine(obj.GetMessage()); } } }
出力:
「this」キーワードを使用して、同じクラス内のメソッドを呼び出すことができます。
コード:
using System; namespace keywords { public class Employee { void displaySalary() { //calling displayDetails() method of same class this.displayDetails(); Console.WriteLine("Salary: Rs.50000"); } void displayDetails() { Console.WriteLine("Name: ABC"); Console.WriteLine("ID: 123ABC"); } public static void Main(String []args) { Employee emp = new Employee(); emp.displaySalary(); } } }
出力:
「this」キーワードを使用して、同じクラス内のコンストラクターを呼び出すことができます。
コード:
using System; namespace keywords { class Student { // calling another constructor of the same class public Student() : this("ABC") { Console.WriteLine("Parameterless Constructer of Student class"); } //parameterized constructor public Student(string Name) { Console.WriteLine("Parameterized constructor of Student class"); } public void display() { Console.WriteLine("display() method of Student class"); } } public class program { public static void Main() { Student stud = new Student(); stud.display(); } } }
出力:
メソッドが同じクラスのオブジェクトをパラメータとして受け取る場合、そのメソッドの呼び出し中に「this」キーワードをパラメータとして使用できます。
同様に、メソッドは「this」キーワードを使用して同じクラスのオブジェクトを返すことができます。
コード:
using System; namespace keywords { public class Student { double marks; //method taking object of same class as parameter void display(Student stud) { Console.WriteLine("Marks of student: "+stud.marks); } //method returning object of same class Student addGradeMarks(double marks) { this.marks = marks + 5; display(this); return this; } public static void Main(String[] args) { Student stud = new Student(); stud = stud.addGradeMarks(85); } } }
出力:
これらの用途とは別に、「this」キーワードの重要な用途は、インデクサーを宣言するために使用できることです。
コード:
using System; namespace keywords { public class World { private string[] continents = new string[7]; //declaring an indexer public string this[int index] { get { return continents[index]; } set { continents[index] = value; } } } public class ThisDemo { public static void Main() { World world = new World(); world[0] = "Asia"; world[1] = "Africa"; world[2] = "North America"; world[3] = "South America"; world[4] = "Antarctica"; world[5] = "Europe"; world[6] = "Australia"; for (int i = 0; i < 7; i++) { Console.Write(world[i]); Console.Write("\n"); } } } }
出力:
「this」キーワードは拡張メソッドの宣言にも使用できます。
コード:
using System; namespace keywords { //Class1 contains three methods; we will add two more methods in it //without re-compiling it class Class1 { public void Method1() { Console.WriteLine("Method1"); } public void Method2() { Console.WriteLine("Method2"); } public void Method3() { Console.WriteLine("Method3"); } } // Class2 contains Method4 and Method5 methods //which we want to add in Class1 class static class Class2 { public static void Method4(this Class1 class1) { Console.WriteLine("Method4"); } public static void Method5(this Class1 class1, string str) { Console.WriteLine(str); } } public class ThisDemo { public static void Main(string[] args) { Class1 class1 = new Class1(); class1.Method1(); class1.Method2(); class1.Method3(); class1.Method4(); class1.Method5("Method5"); } } }
出力:
以上がC# のこのキーワードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。