私の会社の年上の見習いは「これ」を使用します。たくさん。 2週間前、私はオブジェクト指向のコーディングを開始しましたが、まだ使用されているものを手に入れません。"これは何が必要ですか?" in c#
答えて
あなたが最初に何であるかのインスタンスを理解する必要があります:あなたのプライベートフィールドが与えられたメソッドのパラメータと同じ名前を持つ場合に一般的に使用さ
。あなたがオブジェクトを持っているとしましょう:
public class House
{
public decimal Height { get; set; }
}
あなたはそれの複数のインスタンスを持つことができます。
var smallHouse = new House { Height = 100M };
var bigHouse = new House { Height = 300M };
各インスタンスはHeight
の独自の価値を持っています。 House
のメソッドでHeight
を使用する場合は、の現在のインスタンスメソッドが(呼び出された1人の)インスタンスで動作していることを参照する必要があります。
public class House
{
public decimal Height { get; set; }
public bool IsItTooBig()
{
return this.Height > 200;
}
}
それともthis
を省略し、C#は何を意味するインスタンス値であることを推測させることができます:これは、この現在のインスタンスを参照する変数の特別な種類としてthis
を使用して明示的に
を行うことができます。
public class House
{
public decimal Height { get; set; }
public bool IsItTooBig()
{
return Height > 200;
}
}
プログラマは、明示的に良いか悪いかに意見が異なります。大文字と小文字の区別に従うと、インスタンス状態とメソッドスコープの状態(通常の変数)を区別することができます。
あなたがまたは、競合を命名しているときにメソッドから現在のインスタンスを返すようにしたいときは、絶対に例えば、それを必要とする場合があります:あなたは、これらのケースの多くで不変の適用を検討してください
public class House
{
public decimal Height { get; set; }
public House AddFloor()
{
Height += 100;
return this;
}
}
は、しかし、。
キーワード 'this'は、そのインスタンスのメソッド、フィールド、またはプロパティを明示的に呼び出すために使用されるオブジェクトのインスタンスを表します。
private string name;
public void SetName(string name) {
this.name = name;
}
このクラス内のインスタンスフィールドを参照する場合は、this
を使用しますが、省略することはできますが省略することはできません。
public class InstanceClass
{
int field = 10;
public void Method()
{
int field = 0;
Console.WriteLine(field); // outputs 0
Console.WriteLine(this.field); // outputs 10 because "this" refers to field.
}
}
フィールド名と競合する宣言されたローカル変数がない場合、 "this"は省略できます。
public class InstanceClass
{
int _field = 10;
public void Method()
{
int field = 0;
Console.WriteLine(field);
Console.WriteLine(_field); // prefixed with _.
// no conflicts
// so "this" can be omitted.
}
}
これを省略できない場合は、インデクサーを使用する場合です。
public class InstanceClass
{
private List<int> _source;
private int offset;
public int this[int index] // you use "this"
{
get => _source[index + offset]
set => _source[index + offset] = value;
}
public void Method()
{
var first = this[0]; // must use "this" to refer to indexer for this class.
}
}
"this"は、コンストラクタのオーバーロードも呼び出します。
public class Foo
{
public Foo() : this(0)
{
Console.WriteLine("world");
}
public Foo(int param1)
{
Console.WriteLine("Hello");
}
}
//...
var foo = new Foo(); // outputs "Hello world"
"this"はクラス自体のインスタンスも参照します。自分のインスタンスを返す場合は、これを使用します。
public class Foo
{
public Foo ReturnMe() // weird example.
{
return this;
}
}
- 1. このC++コードでポインタの必要性は何ですか?
- 2. アンドロイドデベロッパーが知る必要があることは何ですか?
- 3. C#のゲーム開発には何が必要ですか?
- 4. Reducerには何が必要ですか?
- 5. リアルタイムメッセージングシステムには何が必要ですか?
- 6. distには何が必要ですか?
- 7. C#PostMessageに必要なライブラリは何ですか?
- 8. この推論を行うには何が必要ですか?
- 9. 「ここから」必要なものは何ですか?
- 10. これは私が何をする必要があるかである
- 11. TTL(Time to Live)とは何ですか?なぜそれが必要ですか? in Android
- 12. Scanf/Printf in C ...ここで何が起こっていますか?
- 13. はこのシナリオで助けが必要ですが、何が標準ですか?
- 14. 継承C++、それはデフォルトコンストラクタで何かを行う必要があり、コンストラクタ
- 15. C++、私はこのような何か必要がある主なコード
- 16. この契約を証明するには何が必要ですか?必要ですか?
- 17. ToString(CultureInfo.CurrentCulture)これは必要ですか?
- 18. RailsとAJAX remote:それ以外は何が必要ですか?
- 19. C#プロジェクトにビルドログファイルが必要ですか?
- 20. 「シングルサインオン」テーブルとは何ですか?なぜこの列リストが必要ですか?
- 21. cdecl明確化が必要:「アレイ5」とは何ですか?ここ
- 22. Windows7のPython 3.4のcursesには何が必要ですか?
- 23. Freeze_support何が必要ですか?
- 24. この関数よりもAjaxには何が必要です
- 25. この汎用コンストラクタが動作するには何が必要ですか?
- 26. メモリフェンスはここに必要ですか?
- 27. allowAllPropertiesの背景は何ですか、なぜここに必要ですか?
- 28. do-whileループプログラムが必要ですか? (C++)
- 29. ここにデザインパターンが必要ですか?
- 30. ここに@propertyが必要ですか?
これは_this_インスタンスを意味します。静的メソッドの場合、インスタンスは存在しないため、使用できません。 –
これは本当に重複していません、OPは単語が使用されていることを理解していない、彼はそれを使用する/省略する方が良いかどうか尋ねていません。 –
答えはhttps://imgur.com/ywS3UDpです。申し訳ありませんが、間違って閉鎖された質問をすべて自分で開くことはできません。 –