[C#] “this”키워드는 언제 사용합니까? [닫은]

다른 사람들 이이 키워드를 어떻게 사용하는지 궁금했습니다 . 생성자에서 사용하는 경향이 있지만 클래스 전체에서 다른 방법으로 사용할 수도 있습니다. 몇 가지 예 :

생성자에서 :

public Light(Vector v)
{
    this.dir = new Vector(v);
}

다른 곳

public void SomeMethod()
{
    Vector vec = new Vector();
    double d = (vec * vec) - (this.radius * this.radius);
}



답변

키워드는 C #에서 여러 가지 용도로 사용 됩니다.

  1. 유사한 이름으로 숨겨진 회원 자격을 얻으려면
  2. 객체가 다른 메소드에 매개 변수로 전달되도록하려면
  3. 메소드가 객체를 반환하도록하려면
  4. 인덱서를 선언하려면
  5. 확장 메서드를 선언하려면
  6. 생성자간에 매개 변수를 전달하려면
  7. 값 유형 (struct) value을 내부적으로 재 할당합니다 .
  8. 현재 인스턴스에서 확장 메서드를 호출하려면
  9. 다른 유형으로 캐스팅하려면
  10. 동일한 클래스에 정의 된 생성자를 연결하려면

예를 들어 일반적인 명명 규칙을 따르고 필드 (낙타 경우) 대신 속성 (파스칼 경우)을 사용하여 로컬 변수와 충돌하지 않도록 범위 내에서 이름이 같은 멤버 및 로컬 변수가없는 경우 첫 사용을 피할 수 있습니다 (낙타) 케이스). C # 3.0에서는 자동 구현 된 속성 을 사용하여 필드를 쉽게 속성으로 변환 할 수 있습니다 .


답변

나는 이것이 으르렁 거리는 소리를 의미하지는 않지만 중요하지 않습니다.

진심으로.

프로젝트, 코드, 직업, 개인 생활 등 중요한 것들을 살펴보십시오. “this”키워드를 사용하여 필드에 액세스 할 수 있는지 여부에 따라 성공을 거두지 않을 것입니다. 이 키워드는 정시에 배송하는 데 도움이되지 않습니다. 버그를 줄이지 않고 코드 품질이나 유지 관리성에 별다른 영향을 미치지 않습니다. 그것은 당신에게 인상을 주거나 사무실에서 더 적은 시간을 보내지 않을 것입니다.

정말 스타일 문제 일뿐입니다. “this”가 마음에 들면 사용하십시오. 당신이하지 않으면하지 마십시오. 올바른 의미를 얻기 위해 필요한 경우 사용하십시오. 사실 모든 프로그래머는 자신 만의 고유 한 프로그래밍 스타일을 가지고 있습니다. 이 스타일은 “가장 미적으로 유쾌한 코드”의 모습에 대한 특정 프로그래머의 개념을 반영합니다. 정의에 따르면 코드를 읽는 다른 프로그래머는 다른 프로그래밍 스타일을 갖게됩니다. 즉, 다른 사람이 좋아하지 않거나 다르게 수행 한 일이 항상있을 것입니다. 어느 시점에서 어떤 사람은 코드를 읽고 무언가에 대해 불평합니다.

나는 그것을 걱정하지 않을 것입니다. 나는 당신의 취향에 따라 코드가 가능한 한 미적으로 기쁘게하는지 확인합니다. 프로그래머 10 명에게 코드 형식을 지정하는 방법을 물어 보면 약 15 가지 의견이 나옵니다. 초점을 맞추는 것이 더 좋은 방법은 코드가 어떻게 반영되는지입니다. 상황이 올바르게 추상화 되었습니까? 의미있는 이름을 골랐나요? 코드 중복이 많이 있습니까? 물건을 단순화 할 수있는 방법이 있습니까? 그런 것들을 올바르게하는 것이 프로젝트, 코드, 직업 및 인생에 가장 긍정적 인 영향을 줄 것이라고 생각합니다. 우연히도, 아마도 다른 사람이 가장 덜 중얼 거릴 수도 있습니다. 코드가 작동하고, 읽기 쉽고, 잘 이해되면, 다른 사람은 필드를 초기화하는 방법을 면밀히 조사하지 않을 것입니다. 그는 단지 당신의 코드를 사용하고 위대함에 감탄합니다.


답변

나는 절대적으로 필요한 경우, 즉 다른 변수가 다른 변수를 가리고있을 때만 사용합니다. 여기와 같이 :

class Vector3
{
    float x;
    float y;
    float z;

    public Vector3(float x, float y, float z)
    {
        this.x = x;
        this.y = y;
        this.z = z;
    }

}

또는 Ryan Fox가 지적한 것처럼 이것을 매개 변수로 전달해야합니다. (로컬 변수는 멤버 변수보다 우선합니다)


답변

개인적으로, 나는 멤버 변수를 언급 할 때 항상 이것을 사용하려고 합니다. 코드를 명확하게하고 더 읽기 쉽게 만듭니다. 모호성이 없어도 처음으로 내 코드를 읽는 사람은 그것을 알지 못하지만 이를 일관되게 사용하면 멤버 변수를보고 있는지 알 수 있습니다.


답변

필요하지 않더라도 인스턴스 변수를 참조 할 때마다 사용합니다. 코드가 더 명확하다고 생각합니다.


답변

나는 그것을 사용한다고 말하는 모든 사람들이 항상 “모범 사례”라고 믿을 수는 없다.

Corey의 예 와 같이 모호성이 있거나 Ryan의 예 와 같이 객체를 매개 변수로 전달해야하는 경우 “this”를 사용하십시오 . 스코프 체인을 기반으로 변수를 분석 할 수 있다는 것은 변수가 포함 된 한정 변수가 필요하지 않을 정도로 명확해야하기 때문에 달리 사용할 이유가 없습니다.

편집 : “this”에 대한 C # 설명서는 위에서 언급 한 “this”키워드에 대해 색인 작성기 선언을 위해 한 번 더 사용했음을 나타냅니다.

편집 : @ JUAN : 허, 내 진술에 불일치가 보이지 않습니다. “this”키워드를 사용할 때 3 가지 경우가 있습니다 (C # 설명서에 설명되어 있음) . 실제로 필요한 경우입니다. 섀도 잉이 없을 때 생성자에서 변수 앞에 “this”를 고수하는 것은 단순히 키 스트로크를 낭비하고 그것을 읽을 때 내 시간을 낭비하는 것이므로 아무런 이점이 없습니다.


답변

StyleCop이 지시 할 때마다 사용합니다 . StyleCop 을 준수해야합니다. 어 그래.