문제

가능한 복제 :
"이"키워드는 언제 사용합니까?

안녕하세요, 이해합니다 This 키워드는 클래스의 인스턴스를 참조하는 데 사용되지만 클래스가 Life, 두 분야를 정의하는 사람 (그들의 이름) 및 그들의 파트너 (그들의 이름):

class Life
{
    //Fields
    private string _person;
    private string _partner;

    //Properties
    public string Person
    {
        get { return _person; }
        set { _person = value; }
    }

    public string Partner
    {
        get { return _partner; }
        set { _partner = value; }
    }

    //Constructor 1
    public Life()
    {
        _person = "Dave";
        _partner = "Sarah";

        MessageBox.Show("Life Constructor Called");
    }

    //Constructor 2
    public Life()
    {
        this._person = "Dave";
        this._partner = "Sarah";

        MessageBox.Show("Life Constructor Called");
    }
}

생성자 1과 생성자 2! 사이에 차이가 있습니까? 아니면 "이"키워드를 사용하는 것이 더 나은 코딩 관행입니까?

문안 인사

도움이 되었습니까?

해결책

생성자는 동일합니다. 내가 두 번째 선호하는 이유는 개인 변수 이름에서 밑줄을 제거하고 컨텍스트를 유지할 수 있기 때문입니다 (이해 가능성 향상). 나는 항상 사용하는 연습을합니다 this 인스턴스 변수 및 속성을 참조 할 때

나는 더 이상 사용하지 않는다 this 다른 표준을 가진 다른 회사로 이동 한 후 이러한 방식으로 키워드. 나는 그것에 익숙해졌고 이제는 인스턴스 멤버를 언급 할 때 전혀 사용하지 않습니다. 나는 여전히 속성을 사용하는 것이 좋습니다 (분명히).

내 수업의 내 버전 :

class Life
{
    //Fields
    private string person;
    private string partner;

    //Properties
    public string Person
    {
        get { return this.person; }
        set { this.person = value; }
    }

    public string Partner
    {
        get { return this.partner; }
        set { this.partner = value; }
    }


    public Life()
    {
        this.person = "Dave";
        this.partner = "Sarah";

        MessageBox.Show("Life Constructor Called");
    }
}

또는 더 좋지만 사용에 대해 명확하지 않습니다. this 필드와 함께.

class Life
{

    //Properties
    public string Person { get; set; }
    public string Partner { get; set; }

    public Life()
    {
        this.Person = "Dave";
        this.Partner = "Sarah";

        MessageBox.Show("Life Constructor Called");
    }
}

다른 팁

"이"는 확장 방법과 함께 .NET 3.5에서도 사용됩니다.

public static class MyExtensions
{    
    public static string Extend(this string text)
    {
       return text + " world";
    }
}

문자열 클래스를 확장합니다

var text = "Hello";
text.Extend();

귀하의 질문에 답하기 위해 : 아니오, 두 생성자에는 차이가 없습니다. IMO, "이"는 코드를 응시하며 필요할 때만 사용해야합니다. 예를 들어 매개 변수와 필드 변수가 동일한 이름을 가질 때만 사용해야합니다.

클래스가 인터페이스를 명시 적으로 구현하는 경우도 있습니다. 클래스 내에서 인터페이스 메소드를 호출 해야하는 경우 인터페이스로 캐스팅해야합니다.

class Impl : IFace
{

    public void DoStuff()
    {
        ((IFace)this).SomeMethod();
    }

    void IFace.SomeMethod()
    {
    }
}

두 진술에는 차이가 없습니다 ...

//These are exactly the same.

this._person 

//and 

_person 

"이것"에 대한 언급은 _person의 경우에 암시되어 있습니다. 나는 그것이 반드시 "더 나은"코딩 연습이라고 말하지 않을 것이며, 그것이 단지 선호도라고 말할 것입니다.

밑줄을 사용하고 있기 때문에 이름 사이에 갈등이 없습니다. 그래서 "this."중복되어 생략 할 수 있습니다. IL은 영향을받지 않습니다.

필드와 가변/구부러 사이에 모호성이없는 한, 하나의 시나리오 만 있습니다. this 키워드 (CTOR- 체인이 아닌 현재 인스턴스를 의미하는 맥락에서)가 엄격하게 필요합니다 - 별도로 정의되는 확장 방법을 호출합니다.

this.SomeExtensionMethod();  // works
SomeExtensionMethod();  // fails

두 가지 생성자는 어쨌든 두 번째 생성자에서 똑같은 일을합니다. this 중복됩니다

이를 사용하여 X라는 로컬 변수와 동일한 이름의 클래스 레벨 필드/속성을 구별 할 수 있습니다.

개인 변수 _person 및 _parter를 사용해서는 안됩니다. 그것이 당신의 게터와 세터의 목적입니다.

구조에 관한 한, 그들 사이에는 실제 차이가 없습니다. 즉, 나는 항상이 키워드를 가독성을 향한 대적으로 사용하는 것을 선호합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top