'What is the meaning of "this" in C#
Could anyone please explain the meaning "this" in C#?
Such as:
// complex.cs
using System;
public struct Complex
{
public int real;
public int imaginary;
public Complex(int real, int imaginary)
{
this.real = real;
this.imaginary = imaginary;
}
Solution 1:[1]
The this keyword is a reference to the current instance of the class.
In your example, this is used to reference the current instance of the class Complex and it removes the ambiguity between int real in the signature of the constructor vs. the public int real; in the class definition.
MSDN has some documentation on this as well which is worth checking out.
Though not directly related to your question, there is another use of this as the first parameter in extension methods. It is used as the first parameter which signifies the instance to use. If one wanted to add a method to the String class you could simple write in any static class
public static string Left(this string input, int length)
{
// maybe do some error checking if you actually use this
return input.Substring(0, length);
}
See also: http://msdn.microsoft.com/en-us/library/bb383977.aspx
Solution 2:[2]
When the body of the method
public Complex(int real, int imaginary) {
this.real = real;
this.imaginary = imaginary;
}
is executing, it is executing on a specific instance of the struct Complex. You can refer to the instance that the code is executing on by using the keyword this. Therefore you can think of the body of the method
public Complex(int real, int imaginary) {
this.real = real;
this.imaginary = imaginary;
}
as reading
public Complex(int real, int imaginary) {
assign the parameter real to the field real for this instance
assign the parameter imaginary to the field imaginary for this instance
}
There is always an implicit this so that the following are equivalent
class Foo {
int foo;
public Foo() {
foo = 17;
}
}
class Foo {
int foo;
public Foo() {
this.foo = 17;
}
}
However, locals take precedence over members so that
class Foo {
int foo;
public Foo(int foo) {
foo = 17;
}
}
assigns 17 so the variable foo that is a parameter to the method. If you want to assign to the instance member when you have a method where there is a local with the same name, you must use this to refer to it.
Solution 3:[3]
Nate and d_r_w have the answer. I just want to add that in your code specifically the this. does in deed refere to the member of the CLASS to distinguish from the arguments to the FUNCTION. So, the line
this.real = real
means assign the value of the function (in this case, constructor) parameter 'real' to the class member 'real'. In general you'd use case as well to make the distinction clearer:
public struct Complex
{
public int Real;
public int Imaginary;
public Complex(int real, int imaginary)
{
this.Real = real;
this.Imaginary = imaginary;
}
}
Solution 4:[4]
The this keyword refers to the current instance of the class and is also used as a modifier of the first parameter of an extension method.

Solution 5:[5]
this references the instance of the class.
Solution 6:[6]
As most answers are mentioning " the current instance of a class", the word "instance" may be difficult for newbies to understand. "the current instance of a class" means the this.varible is specifically used in the class where it is defined, not anywhere else. Therefore, if the variable name also showed up outside of the class, the developer doesn't need to worry about conflicts/confusions brought by using the same variable name multiple times.
Solution 7:[7]
this is a variable which represents the current instance of a class. For example
class SampleClass {
public SampleClass(someclass obj) {
obj.sample = this;
}
}
In this example, this is used to set the "sample" property on someclass obj, to the current instance of SampleClass.
Solution 8:[8]
Refers to current instance of class
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | surfmuggle |
| Solution 2 | jason |
| Solution 3 | n8wrl |
| Solution 4 | Rami Alshareef |
| Solution 5 | Servy |
| Solution 6 | CathyQian |
| Solution 7 | bbosak |
| Solution 8 | DeveloperX |
