우리 회사의 나이든 견습생은 "this"를 사용합니다. 많이. 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
과 작업하려면 현재 인스턴스 메소드가 (호출 된 하나의 소비자)에서 작동하고 있음을 참조해야합니다.
이
이 현재 인스턴스를 참조 변수의 특별한 종류로this
를 사용하여 명시 적으로 수행 할 수 있습니다
public class House
{
public decimal Height { get; set; }
public bool IsItTooBig()
{
return this.Height > 200;
}
}
아니면 this
을 생략하고 C 번호는 무엇을 의미하는 인스턴스 값입니다 추측 할 수 있습니다 :
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;
}
}
이는 _this_ 인스턴스를 의미합니다. 정적 메소드에있는 경우 인스턴스가 없으므로 사용할 수 없습니다. –
그건 정말 중복 아니에요, OP는 심지어 단어가 사용되는 것을 이해하지 못합니다, 그는 그것을 사용/생략하는 것이 더 나은지 묻지 않습니다. –
답은 https://imgur.com/ywS3UDp입니다. 죄송 합니다만 부당하게 폐쇄 된 질문을 모두 다시 열 수는 없습니다. –