생성자 변수는 개인 필드 또는 속성으로 직접 전달해야합니까?

StackOverflow https://stackoverflow.com/questions/131517

  •  02-07-2019
  •  | 
  •  

문제

이제 이것은 .NET이지만, 교장은 모든 OOP 언어에 적용되어야한다고 확신합니다.

r# 일반적으로 생성기 생성자와 들어오는 변수를 개인 필드로 전달하는데, 이는이를 위해 그것을 속성으로 전달하는 경향이 있습니다.

어떻게 다른지에 대한 의견과 그에 대한 모범 사례는 무엇입니까?

도움이 되었습니까?

해결책

속성을 사용하는 것은 가상/재정의가 아닌 한 괜찮습니다. 속성은 본질적으로 방법이며, 적절한 유형이 아직 구성되지 않을 수 있으므로 생성자 내에서 가상 메소드를 호출해서는 안됩니다. Microsoft는 자체적으로 나열했습니다 가이드 라인 세트, 바닥으로 스크롤하여 문제를 보여주는 관련 지침 및 코드 스 니펫을 확인하십시오 (메소드를 사용하여 설명하지만 .NET 속성은 본질적으로 특수한 방법입니다).

다른 팁

속성 세터를 통해 매개 변수를 전달하면 유효성 검사 코드를 한 곳에만 유지할 수 있습니다.

실제 구현은 정확한 조건을 지시하지만 개인 분야로 직접 보낸 대신 부동산으로 보내는 것이 좋습니다. 예를 들어, 때로는 속성을 사용할 때 이벤트가 해고되며 생성자 중에 해당 이벤트를 발사하고 싶지 않습니다. 또는 다른 이유로 속성 논리를 우회하고 싶을 수도 있습니다.

속성 세터를 사용하여주의하십시오. 세터에 코드가있을 수 있으며 예상치 못한 부작용이 발생할 수 있습니다.

생성자 내부의 필드를 조작합니다. 필드는 실제로 객체의 고유 한 상태를 나타내며 생성자 작업은이 내부 상태를 초기화하는 것입니다. 속성은 캡슐화 목적을 위해 여기에 있으며 객체 상태에 대한 공개 인터페이스의 일부입니다.

객체의 내부 상태를 설정하기 전에 생성자 인수 또는 속성 입력 값에 적용하는 변환 로직은 매우 다를 수 있습니다. 어쨌든, 그렇다면, 나는 속성 세터의 생성자를 직접 체인하는 대신 속성 세터와 생성자에서 호출 된 명시 적 변환 방법을 사용했습니다.

논리가 전혀 없다면, 왜 생성자 내부에 속성 세터를 사용하고 싶은지 알 수 없습니다.

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