2009-04-13 3 views
4

나는 롭 마일즈 C# 옐로우 북 (Yellow Book)이라는 책을 읽고 있었다 :C# 프로그램에서 속성을 사용해야합니까? 아니면 get/set 접근자를 사용해야합니까? 나는이 문장을 가로 질러 왔을 때

프로그래머의 사랑 새 반짝 장난감. 그들은 과시하기 위해 언어 기능을 사용하기를 아주 좋아합니다. 속성은 이와 비슷할 수 있습니다. 속성 대 get 및 set 메서드를 고려할 때 나는 당신이 이들과 함께 어디에 있는지 알기 때문에 구식 get 및 set 메서드에 대한 팬입니다. 반면에 올바른 방법으로 사용하면 속성을 통해 삶이 더 쉬워 질 수 있습니다.

나는 이것이 무슨 뜻인지 정말로 모르겠다. 너희들은 뭐라고 제안하니? MS는 무엇을 제안합니까?

+1

중복 http://stackoverflow.com/questions/601621/properties-vs-methods/601649 – cletus

+0

.NET의 속성에 대한주의 사항으로 인해 Java에서 수행하는 성능 오버 헤드가 발생하지 않습니다. – Soviut

+1

@Soviut : 존재하지 않는 Java 속성을 의미합니까? – cletus

답변

18

난 당신이 로마인처럼 수행 비 프로그래밍 조언 로마

의 비트를 고려해야한다고 생각합니다.

.NET에는 모든 라이브러리, 디자이너 및 코드 생성기에 속성이 포함되어 있습니다. 그것은 거의 플랫폼의 분리 할 수없는 부분입니다. 일반 속성 대신 get/set 접근자를 사용하면 다른 모든 프로그래머가 기대하는 것과 매우 다른 모양을 갖는 라이브러리를 만들 수 있습니다.

get/set 접근자를 사용하면 다양한 도구와 호환되지 않는 코드를 만들 가능성이 높아집니다. 예를 들어 특별한 경우의 속성과 필드가 있고 거기에 특별한 기능을 제공하는 많은 도구가 있습니다. 당신은 동등한 구조이지만 툴을 지원하지 않습니다.

+0

"get/set 접근자를 사용하면 다양한 도구와 호환되지 않는 코드를 만들 가능성이 높아집니다." - 정말로, 그리고 "도구"에 대한 매우 광범위한 정의를 위해서! WinForms/ASP.NET/WPF의 데이터 바인딩을 생각해보십시오. 예를 들어 ... –

0

속성을 매우 좋아합니다. "클래스 라이브러리 설계 지침"에서 속성을 사용하는 것이 좋습니다 (특히 다른 주와 독립적 인 상태의 경우).

0

이 문제를 생각하는 가장 좋은 방법은 실제 개체와 비교를 그리는 것입니다. 실생활에서 당신이 설계되어야한다고 말하겠습니다. 머리 색깔, 높이 및 너비 등의 측면에서 당신의 속성 중 어떤 것을 부릅니까? 일단이 라인에 대해 생각하기 시작하면, 모든 사람들이 생각할 수있는 자신의 길을 가지기 때문에 더 많은 도움이 될 것입니다.

5

로브 마일 (Rob Miles)이 누구인지 모르겠지만 견적이 정확하다면 나는 이미 그를 존중하지 않았습니다.

.NET의 모든 기능은 속성을 사용합니다. 코드에서 속성을 사용하지 않으면 코드의 일부만 표시됩니다.

+4

짐작할 수 있겠지만, 인용문은 1.0 릴리스 이전에 작성된 책 (예 : 7 년 전)에서 나옵니다. 그 당시, 당신이 다이 하드 자바 프로그래머라면, 더 이해하기 쉬울 것입니다. –

0

속성을 사용하지 않으면 .NET에서 매우 유용하다고 생각되는 매우 눈에 띄는 기능이 느슨해집니다. 바인딩 : 바인딩. .NET의 속성에 대해서만 바인딩 할 수 있기 때문에 get/set 접근자를 사용하면 다른 사용자와 잘 어울리지 않습니다.

2
myObject.Property++; 

대 :

myObject.SetProperty(myObject.GetProperty() + 1); 

네 ..

명시 게터/세터 방법은 비 단순 연산/처리가 수행되기 때문에, 실제 작업이 어디에 수행 될 때 사용되어야한다.

8

나는이 책의 일부를 몇 년 전에 C#으로 옮겨가는 자바 프로그래머로 썼다. 나는 다음 버전의 텍스트를 다시 살펴보고 조금 더 명확하게 해줄 것이라고 생각한다.

어떤 사용자가 어떤 코드를 사용할 때 어떤 코드가 실행될 것이라는 것을 클래스의 사용자가인지하고 있는지 확인하려면이 코드를 메서드에 넣으면이 코드가 명확하게됩니다. 또한 메서드를 사용하면 예외를 throw하지 않고도 오류 조건을 반환 할 수 있습니다. 컴파일러는 속성을 메소드로 변환하기 때문에 퍼포먼스 히트는 없습니다.

필자가 작성한 코드에서 속성을 많이 사용합니다. 특히 상태와 같은 경우에 특히 그렇습니다. 나는 정말로 속성을 사용하지 않고, 올바른 상황에서 올바른 것을 사용하도록 옹호하지 않았습니다.

+0

와우 저자 자신. – Kredns

+0

존 손 더스 (John Saunders)의 조나단 (Jonathan)의 답변이 실제로 머리에 못을 박았다. – Kredns

+0

속성을 사용할시기와 방법을 언제 사용하는지 알면 가르치는 것이 좋습니다. 실제로 Microsoft는 각각을 사용해야 할 때를 명확하게 만듭니다. 그러나 속성 대신 get/set 메서드를 사용하여 옹호하는 것처럼 보였습니다. 속성은 C#에서 비뚤어졌습니다. 의도가 아니라면 일부 설명이 필요합니까? –

관련 문제