2017-10-24 7 views
-1

우리 회사의 나이든 견습생은 "this"를 사용합니다. 많이. 2 주 전 나는 객체 지향 코딩을 시작했지만 아직 사용중인 것을 얻지 못했습니다."무엇이 필요한가요?" in C#

+1

이는 _this_ 인스턴스를 의미합니다. 정적 메소드에있는 경우 인스턴스가 없으므로 사용할 수 없습니다. –

+0

그건 정말 중복 아니에요, OP는 심지어 단어가 사용되는 것을 이해하지 못합니다, 그는 그것을 사용/생략하는 것이 더 나은지 묻지 않습니다. –

+0

답은 https://imgur.com/ywS3UDp입니다. 죄송 합니다만 부당하게 폐쇄 된 질문을 모두 다시 열 수는 없습니다. –

답변

2

이 처음이다. 의 당신이 객체가 있다고 가정 해 봅시다 :

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; 
    } 
} 

은 그래도.

0

'this'키워드는 해당 인스턴스의 메소드, 필드 또는 속성을 명시 적으로 호출하는 데 사용되는 객체의 인스턴스를 나타냅니다. 개인 필드가 주어진 방법의 매개 변수와 같은 이름이있을 때 일반적으로 사용되는

: 당신은 무엇을 예를 이해할 필요가

private string name; 

public void SetName(string name) { 
    this.name = name; 
} 
0

해당 클래스의 인스턴스 필드를 참조하려면 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; 
    } 
}