2012-04-20 5 views
2
나는 개인 클래스 메소드 내부의 필드/속성을 변경할 때 사용한다 시나리오

:올바른 사용

public class Example 
{ 
private int intVar = 0; 
private string stringVar = string.Empty; 

public int IntVar 
{ 
    get { return this.intvar; } 
    set { this.intvar = value; } 
} 

public string StringVar 
{ 
    get { return this.stringVar ; } 
    set { this.stringVar = value; } 
} 

private void SomeMethod() 
{ 
    //change fields in this way: 
    this.intVar = 50; 
    this.stringVar = "changed"; 
    //or that way(through properties): 
    this.IntVar = 50; 
    this.StringVar = "changed"; 
} 
} 

어쩌면이 예에서이 차이가 없습니다하지만 만약 누군가 속성에 추가 코드를 추가하고 속성을 통해 필드를 변경하면 다른 것들이 변경됩니까?

어떤 방향으로 나아 졌는지 또는 실제로 아무런 차이가 없다고 말할 수 있습니까?

C# 3.0부터 자동 구현 된 속성을 작성할 수 있지만 C# 2.0이라는 것을 알고 있습니다.

+3

그냥 한 가지 덧글 - 대문자로 필드의 이름과 속성이 다르다는 것은 대개 나쁜 생각입니다. 일반적으로 _intVar 및 _stringVar 필드의 이름을 지정하고 실수 타입을 잘못 호출 할 가능성을 피하거나, IntVar에서 'IntVar'를 반환하면 StackOverflowException이 발생합니다. –

+0

힌트를 보내 주셔서 감사합니다. – adams

+0

[Microsoft] (http://msdn.microsoft.com/en-us/library/ta31s3bc (v = vs.71) .aspx)에 따르면 접두사는 사용할 수 없습니다. 필드 이름. – Botz3000

답변

1

일반적으로 속성을 사용하는 것이 좋습니다. 게터와 세터가 단순하다면 어쨌든 런타임시 지터에 의해 인라인 될 수 있습니다. 그리고 당신이 말했듯이, 아마도 다른 속성 코드가 변경 될 것입니다.

일반적인 변경은 INotifyPropertyChanged를 구현하여 변경 알림을 추가하는 것입니다. 필드를 직접 설정하면 리스너는 알림을받지 못합니다.

내부 클래스가 아닌 내부 공용 인터페이스를 사용하는 것을 선호합니다. 나에 대한 예외는 내가 명시 적으로 부작용을 원하지 않을 때이다. 그런 경우는 거의 없습니다.

0

아무런 차이가 없으며 개인적인 취향입니다.
속성을 사용하는 것을 선호합니다.

+2

그것은 나중에 설정을 검증을 추가 할 때 차이가 있습니다. –

1

제 경험상, 항상 속성을 사용하고 var에 직접 액세스하지 마십시오. 나중에 누군가가 속성 접근 자에 코드를 추가하면 해당 변경의 부작용을 검사 할 책임이 있습니다.

이 시나리오에서는 테스트 작업을 용이하게합니다. 변경 구현자는 내부 이름이 아닌 공개 이름 만 확인해야합니다.

1

일종의 유효성 검사를 수행하는 경우 (예 : intVar가 100 값을 초과 할 때 예제 개체를 유효하지 않은 것으로 표시하는 경우) 속성을 사용해야합니다.

public int IntVar 
{ 
    get { return this.intvar; } 
    set 
     { 
     if (value > 100) 
      // handle this corner case 
     else  
      this.intvar = value; 
     } 
} 

의가 개인 방법은 것으로 someMethod가 호출

private void SomeMethod() 
{ 
    int result = ...; 
    IntVar = result; 
} 

여기에 속성을 사용하는 것이 좋습니다 몇 가지 계산을 수행한다고 가정 해 봅시다, 그래서 필드는이 작업을 수행 할 수 있기 때문에 속성은 유효성 검사를 처리 할 것 .

+0

그건 내 질문에 언급 한 여분의 코드 예입니다. – adams