2013-03-18 2 views
4

내 프로젝트 중 하나에는 비디오 형식에 대한 사용자 지정 식별자 문자열을 나타내는 값 형식/구조체가 있습니다. 이 경우 콘텐츠 유형 문자열이 포함될 수 있지만 그 값은 다를 수 있습니다.사용자 지정 구조/형식의 공통 값 표시

전 구조체를 전달할 때 강하게 입력 할 수 있도록 구조체를 사용했으며 초기 문자열 값에 대해 몇 가지 온 전성 검사를 수행했습니다.

매우 일반적인 형식이 있으므로이 값을 정적 읽기 전용 필드로 기본값으로 표시했습니다.

public static readonly VideoFormat Unknown = new VideoFormat(string.Empty); 
public static readonly VideoFormat JPEG = new VideoFormat("image/jpeg"); 
public static readonly VideoFormat H264 = new VideoFormat("video/h264"); 

공통 값을 정적 읽기 전용 필드 또는 속성 만 가져 오는 것이 더 좋습니까? 나중에 변경하려는 경우 어떻게해야합니까? NET Framework에서 두 가지 방법이 모두 사용되는 것을 볼 수 있습니다. System.Drawing.Color은 정적 읽기 전용 속성을 사용하고 System.StringString.Empty에 대한 정적 읽기 전용 필드가 있고 System.Int32에는 MinValue에 대한 const가 있습니다.

은 (대부분 this question에서하지만보다 구체적이고 직접적으로 관련된 질문을 복사.) 당신이 뭔가 결코 변화를 선언하지 않는 한

+0

아마도 : [C# : Static readonly vs const] (http://stackoverflow.com/q/755685/588306), [C#에서 공개적으로 액세스 가능한 상수를 구현하는 가장 좋은 방법] (http://stackoverflow.com/ q/2889139/588306) – Deanna

답변

2

속성 좋은 생각입니다.

속성을 사용하면 라이브러리를 사용하는 프로그램에 영향을 미치지 않고 변경 내용/변형을 처리하지 않고 내부 구현을 변경할 수 있습니다. 소비하는 프로그램은 깨지지 않으며 재 컴파일 될 필요가 없습니다.

(나는 이것이 나쁜 예를 알고하지만 당신은 아이디어를 얻을 ..)

public static VideoFormat H264Format 
{ 
    get{ 
     // This if statement can be added in the future without breaking other programs. 
     if(SupportsNewerFormat) 
      return VideoFormat.H265; 

     return VideoFormat.H264; 
    } 
} 

이 또한 염두에 두어야 당신이 코드 휴식을 소모, 미래의 속성에 필드를 변경하기로 결심했다면 그.

+0

이 경우 필드는 속성과 동일한 방식으로 작동합니다. – Deanna

+0

어떻게 로직을 필드에 넣고 그 로직을 기반으로 다른 결과를 반환합니까? – lahsrah

+0

죄송합니다. 저는 값 자체를 더 많이 언급하면서이를 바꿀 수있었습니다. 둘 다 (디자인 타임에) 변경하고 모든 발신자에게 적용 할 수 있습니까? – Deanna

관련 문제