[C#] ‘const string’vs. ‘static readonly string’in C #

C #에서 차이점은 무엇입니까

static readonly string MyStr;

const string MyStr;

?



답변

const문자열 을 사용 하면 컴파일러는 compile-time에 문자열의 값 을 포함합니다 .
따라서 const다른 어셈블리 의 값을 사용한 다음 원래 어셈블리를 업데이트하고 값을 변경하면 다시 컴파일 할 때까지 다른 어셈블리에 변경 내용이 표시되지 않습니다 .

static readonly문자열은 런타임에 찾아 지는가 일반 필드입니다. 따라서 다른 어셈블리에서 필드 값이 변경되면 다시 컴파일하지 않고 어셈블리가로드되는 즉시 변경 내용이 표시됩니다.

이것은 또한 것을 의미 static readonly문자열과 같은 일정하지 않은 부재, 사용 Environment.UserName또는 DateTime.Now.ToString(). const문자열은 다른 상수 또는 리터럴을 사용하여 초기화 할 수 있습니다.
또한 static readonly문자열은 정적 생성자에서 설정할 수 있습니다. const캐릭터는 초기화 된 인라인 될 수 있습니다.

a static string는 수정할 수 있습니다. static readonly대신 사용해야 합니다.


답변

다음은 장단점에 대한 좋은 분석입니다 .

따라서 값이 변경 될 가능성이 거의 없거나 외부 앱 / libs가 상수를 사용하지 않을 경우 상수를 사용해야하는 것으로 보입니다. 런타임 계산이 필요하거나 외부 소비자가 요인 인 경우 정적 읽기 전용 필드를 사용해야합니다.


답변

const

public const string MyStr;

A는 컴파일 시간 상수 (당신은 예를 들어, 메서드 매개 변수에 대한 기본 매개 변수로 사용할 수 있습니다), 그것은 것입니다 하지 당신이 그런 기술을 사용하는 경우 난독 수

static readonly

public static readonly string MyStr;

이다 런타임 상수. 이는 애플리케이션이 실행되기 전이 아니라 실행될 때 평가된다는 것을 의미합니다. 예를 들어 메서드 (컴파일 오류)의 기본 매개 변수로 사용할 수없는 이유입니다. 여기에 저장된 값은 난독 화 될 수 있습니다.


답변

OQ는 static stringconst. 둘 다 서로 다른 사용 사례를 가지고 있습니다 (둘 다 정적으로 취급되지만).

const는 정말 일정한 값에만 사용하십시오 (예 : 빛의 속도-그러나 이것은 매체에 따라 다릅니다). 이 엄격한 지침의 이유는 const 값이이를 참조하는 어셈블리의 const 사용으로 대체되기 때문입니다. 즉, 정의 위치에서 const가 변경되면 버전 관리 문제가 발생할 수 있습니다 (즉, 상수가 아니어야 함). 아무튼). private const다른 어셈블리에 기본 및 하위 클래스가있을 수 있고 개인 필드가 상속 되기 때문에 이것은 필드 에도 영향을줍니다 .

정적 필드는 선언 된 유형에 연결됩니다. 주어진 유형의 모든 인스턴스에 대해 동일해야하는 값을 나타내는 데 사용됩니다. 이러한 필드는 원하는만큼 여러 번 쓸 수 있습니다 (읽기 전용으로 지정되지 않은 경우).

static readonlyvs 를 의미했다면 미래의 증거이기 때문에 거의 모든 경우에 const권장 static readonly합니다.


답변

당신은의 값을 변경할 수 있습니다 static readonly string단지에 static당신이 값은 변경할 수 없습니다 반면, 클래스 또는 변수 초기화의 생성자 const문자열 어디서나.


답변