Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ 構造体メソッド内でのフィールドへの正しいアクセス方法 | Structs & Enumerators
C#オブジェクト指向構造

book構造体メソッド内でのフィールドへの正しいアクセス方法

メニューを表示するにはスワイプしてください

これまでにメソッドを作成し、データを渡して問題なく使用してきましたが、メソッドのパラメータ名が構造体内のフィールド名と衝突する例を考えてみましょう。

index.cs

index.cs

copy
1234567891011121314151617181920212223242526272829
using System; struct Coordinate { public int x; public int y; public void setValue(int x, int y) { x = x; y = y; } public void displayValue() { Console.WriteLine($"({x}, {y})"); } } class ConsoleApp { static void Main(string[] args) { Coordinate coord = new Coordinate(); coord.setValue(5, 7); coord.displayValue(); } }

この場合、コンパイラはエラーを表示しませんが、プログラムの出力が (0, 0) を使用しているにもかかわらず setValue(5, 7) となるため、論理的に正しくありません。

これは、x = x という文が非常に曖昧であり、メソッドパラメータ構造体フィールド の両方が x という名前を持っているためです。コンパイラによると、x = x の文では メソッドパラメータ x が値 x を自分自身に再度代入しているだけであり、論理的には何もしていないことになります。

これを修正するには、this キーワードを使用します。this キーワードは、構造体の フィールド を参照していることをコンパイラに伝えます。

構文は this.fieldName です。修正後のコードは次のようになります。

index.cs

index.cs

copy
1234567891011121314151617181920212223242526272829
using System; struct Coordinate { public int x; public int y; public void setValue(int x, int y) { this.x = x; this.y = y; } public void displayValue() { Console.WriteLine($"({x}, {y})"); } } class ConsoleApp { static void Main(string[] args) { Coordinate coord = new Coordinate(); coord.setValue(5, 7); coord.displayValue(); } }

これでコンパイラは、x = x の文において、左側の x構造体フィールド、右側の xメソッドパラメータであることを認識し、今回はフィールドが正しく更新されます。

コード内で曖昧さが生じる場合は、this キーワードを使用して解決します。構造体メソッド内でフィールドへアクセスする際には、常に this キーワードを使うことが一般的な良い習慣です。

question mark

クラスメソッド内でフィールドを参照する際の曖昧さを解消するために使用されるキーワードはどれですか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 2.  6

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 2.  6
some-alt