2011-03-21 4 views
14

상수 개체를 만들 수있는 방법이 있습니까? (즉, 편집 할 수없고 컴파일 타임에 만들어집니다)?C# "상수 개체"를 기본 매개 변수로 사용

저는 C# 언어로 놀고있어 선택적 매개 변수 기능에 주목했으며 기본 매개 변수를 선택적 매개 변수로 사용할 수 있다고 생각했습니다. 다음을 고려하십시오.

이것은 분명히 컴파일되지 않지만, 내가하고 싶은 일의 예입니다. 이와 같이 상수 개체를 만들고 선택적 매개 변수의 기본값으로 사용할 수 있습니까 ??

+1

그냥 할 수 있기 때문에 언어 기능을 사용하지 마십시오. 그들이 직업에 적합한 도구이기 때문에 그것을 사용하십시오. 기본 매개 변수는 원하는 작업에 적합한 도구가 아닙니다. 건배! – Jon

+1

이것이 파이썬이라면 이는 기본 매개 변수를 완벽하게 수용 할 수 있습니다. 기본 매개 변수가 작업에 적합한 도구가 아닌 이유는 없습니다 (C#에서는 유효하지 않습니다). – Gabe

답변

25

아니요, 선택적 매개 변수의 기본값은 컴파일시 상수 일 필요가 있습니다. 귀하의 경우에는

는 해결 방법은 다음과 같습니다

public void doSomething(SettingsClass settings = null) 
{ 
    settings = settings ?? DefaultSettings; 
    ... 
} 
+0

'null'이 기본값이 아닌 다른 작업을 수행하기를 원하지 않는다면 말입니다. –

+0

그건 좋은 해결책입니다 ... 본 적이 없습니까 ?? 전에 널 ... 너를 너가 C#을 알고 있다고 생각할 때 너는 널 응집시킨다. ... – user623879

+0

좋은 1 개, 고마워! –

4

하는 것은 일반적으로 당신이 원하는 것은 불가능합니다. Ani의 대답이 보여주는 것처럼 "유효하지 않은"기본값으로 가짜로 만들 수 있지만 유효하지 않다고 생각할 수있는 값이 없으면 세분화됩니다. 이것은 nullable 유형으로 매개 변수를 변경할 수있는 값 유형에 문제가되지 않지만 복싱이 발생하고 구현 세부 사항을 수용하기 위해 함수의 인터페이스를 "희석"할 수도 있습니다.

public void doSomething() 
{ 
    var settings = // get your settings here any way you like 
    this.doSomething(settings); 
} 

public void doSomething(SettingsClass settings) 
{ 
    // implementation 
} 

이 매개 변수가 값 형식 인 경우에도 작동 : 여러 과부하의 사전 C# 4 패러다임 선택적 매개 변수를 대체 할 경우

당신이 원하는 기능을 달성 할 수있다.

+0

동의하되 선택적 매개 변수 방법을 찾고있었습니다. – user623879

+0

@ user623879 : 새로운 첫 번째 단락을 추가 했으므로 응답이 더욱 완벽 해졌습니다. – Jon

+0

@ 사용자 : 정말 중요하지 않습니다. 이 경우에도 매개 변수는 선택적입니다. IMHO Jons 방법은 Anis에게 명백하게 우월합니다. –

0

const 대신 readonly 속성을 사용할 수 있습니다. 예를 들면 다음과 같습니다.

//this class has default settings 
private readonly SettingsClass DefaultSettings = new SettingsClass(); 

public void doSomething(SettingsClass settings = DefaultSettings) 
{ 
} 
+2

이것은 컴파일되지 않은 것 같습니다. –

+2

이것은 작동하지 않습니다 –

+0

, readonly! = const, const는 컴파일시 평가되지만 readonly는 런타임에 나타납니다. const는 인라인 될 것이고 읽기 전용으로는되지 않을 것이다. –

관련 문제