2009-03-08 4 views
9

메소드의 기본 매개 변수가 캡슐화를 위반합니까?OOP의 기본 매개 변수가 좋지 않습니까?

C#에서 기본 매개 변수를 제공하지 않은 이유는 무엇입니까?

+0

"귀하의 질문을"코드에서 이상한 곳에서 오는 비밀스러운 마법 물건입니까? "라고 읽습니다. C#에서는이 선택적 매개 변수 GARBAGE가 허용되므로 훌륭한 언어는 허용되지 않습니다. – Sharky

답변

10

this은 Microsoft의 "공식적인"대답입니다. 그러나 기본 (및 명명 된) 매개 변수 은 C# 4.0에서을 사용할 수 있습니다.

1

첫 번째 질문은 - 아니요, 여러 가지 오버로드 된 생성자를 제공하는 것과 정확히 같습니다. 둘째로, 나는 말할 수 없었다.

3

아니요, 캡슐화에 영향을주지 않습니다. 단순히 자주 필요하지 않습니다. 종종 인수의 수를 줄이는 오버로드를 만드는 것이보다 유연하고 깨끗한 솔루션이므로 C#의 디자이너는 언어에 기본 매개 변수의 복잡성을 추가하는 이유를 알지 못합니다.

"같은 일을하는 또 다른 방법"을 추가하는 것은 항상 단점입니다. 경우에 따라 편리 할 수 ​​있습니다. 그러나 합법적으로 만드는 구문이 많을수록 언어가 더 복잡해지고 더 많은 사람들이 장벽을 뚫을 수있어 향후 확장을 막을 수 있습니다. (아마 그들은 비슷한 구문을 사용하는 언어에 대한 또 다른 확장 기능을 제공 할 것입니다. 이전에 추가 한 기능과 충돌하기 때문에 추가 할 수 없습니다.)

1

기본 매개 변수는 C# 4.0

그것에 대해 일부 독서 자료를에 포함됩니다 :

click

click

또한 this post의 저자는의 기사를 게시 할 것으로 보인다 가까운 장래에 '왜'MS가 C#으로 기본 매개 변수를 구현할 것인지 선택합니다.

1

한 가지 단점을 제공는 매개 변수 이름에 대한 종속성을 생성하는하지 왜 대답이다. 이것은 VB에서 이미 존재했기 때문에 4.0에서 구현 한 이유 중 하나 일 수 있습니다.

또 다른 단점은 개체를 캐스팅하는 방법에 따라 기본값이 달라진다는 것입니다. 여기에서 읽을 수 있습니다 : http://saftsack.fs.uni-bayreuth.de/~dun3/archives/optional-parameters-conclusion-treat-like-unsafe/216.html.

2

앞서 언급했듯이 기본 매개 변수는 우선 순위 지정 기능이 아니지만 C# 4.0에 추가 될 가능성이 큽니다. 그러나 이전 버전을 포함시키지 않는 것이 좋은 이유가 있다고 생각합니다 (4.0에서, 이해했듯이 기본 매개 변수가 형식 호환성을 향상시키는 duck typing 프로그래밍 스타일을 지원하는 것이 대부분입니다).

과도한 매개 변수 목록 (분명히 4-5 개의 고유 매개 변수 이상)은 code smell입니다. 기본 매개 변수 자체는 악의가 없지만 디자인 불량을 초래하여 리팩터링을 더 많은 객체로 지연시킬 수 있습니다.

관련 문제