2012-01-13 2 views
12

나는이 두 ctors가 있다고 가정 다음과 같은 방법 또는 속성 간의 모호 "오류 1 :호출은

SomeClass sc = new SomeClass("Lorem ipsum"); 

내가이 얻을 것이다를 전화는 다음 방법이나 속성 사이에 모호합니다. [...] "

최종 결과가 어떤 것이 었는지는 중요하지 않습니다. 적어도이 특별한 경우에는, 그리고 나에게 그것은 모두 t이다. 모자 문제는 지금 당장),이 문제를 해결하기위한 나의 선택은 무엇입니까?

편집 1 : @oltman : 단순화 된 예.

SomeClass sc = new SomeClass("Lorem ipsum", (Color?)null, (Font)null); 
+3

당신은 모두가 이유가 있는가, 또는이 그냥 간단한 예입니다 : 여기

는 널 (null)로 클래스를 전달하는 또 다른 구문입니다? – oltman

답변

21

두 생성자가 같은 수를 가지고 :

난 그냥

[...] new SomeClass("Lorem", Color.Green) 

대신 작동하도록 강제로

[...] new SomeClass("Lorem", null, Color.Green) 
+0

이 작품은 경이로움을 발휘하고 정확하게 내가 찾고 있던 것입니다. –

7

방법 중 하나 쓸 수 있도록하려면 그러나 다른 순서로. 두 개의 생성자 매개 변수에 기본값을 지정 했으므로 컴파일러는 두 번째 인수가 제공되지 않을 때 두 개의 오버로드를 구분할 수 없습니다.

난 당신이 기존의 생성자를 제거하고 다음과 같이 대체 권합니다 :

public SomeClass(string a, Color? color, Font font) 
{ 
    // constructor implementation 
} 

public SomeClass(string a) : this(a, null, null) {} 
public SomeClass(string a, Color color) : this(a, color, null) {} 
public SomeClass(string a, Font font) : this(a, null, font) {} 
+0

매우 유용한 경우 하나의 인수가있을 때 – Eli

1

은 그냥 문자열을 사용 다른 생성자를 만들고, 두 번째 매개 변수는 필수 만들기 위해 위의 생성자를 업데이트 할 수 있습니까?

아이디어는 항상 문자열을 공급하고 선택적으로 어떻게 이것에 대해, 색상이나 글꼴 또는 둘 모두를 제공하여 객체를 생성 할 수있는 경우 : "오류 :

public SomeClass(string a) 
     { 
      // ... 
     } 

public SomeClass(string a, Color? c) 
     { 
      // ... 
     } 

public SomeClass(string a, Font f, Color? d = null) 
     { 
      // ... 
     } 
0

나는이를 얻을 수 있습니다 1 호는 다음의 방법 또는 속성 간의 모호 [...] "

I는 동일한

인 최종 결과로 참조되는 한 중요하지 않다 나에게 명백한 것으로 보인다

전화 입니다. 각 생성자는 고유합니다. 각 생성자마다 다른 논리가있을 수 있으므로 인스턴스 생성 및 반환 모두 문제가되지 않습니다. 컴파일러는 여전히 어떤 생성자를 의미하는지 알지 못합니다.

0

이것은 완벽한 예제 인 anti-pattern입니다.이 문제를 피하는 가장 좋은 방법은 @Phil Klein의 답변입니다.

SomeClass sc = new SomeClass("Lorem ipsum", null as Color, null as Font);