2012-11-16 3 views
2

프로그래머가 선택할 수있는 값 목록을 제공하는 클래스에서 속성을 만들어야합니다. 나는 과거에 enums 타입을 사용하여 이것을했다."enum"유형 속성 값을 동적으로 만들 수있는 방법

Public Enum FileType 
    Sales 
    SalesOldType 
End Enum 

Public Property ServiceID() As enFileType 
    Get 
     Return m_enFileType 
    End Get 
    Set(ByVal value As enenFileType) 
     m_enFileType = value 
    End Set 
End Property 

문제는 SQL 테이블 값을 기반으로 클래스 초기화시 값 목록을 채우고 싶습니다. 내가 읽은 바로는 기본적으로 상수이기 때문에 즉시 열거 형을 생성 할 수 없습니다.

목록 또는 사전 유형을 사용하여 목표를 달성 할 수있는 방법이 있습니까? 또는 다른 방법을 사용할 수 있습니다.

+2

컴파일 타임에 무엇이 있는지 모르는 경우 어떻게 값을 사용합니까? 컴파일하기 전에 자동으로 코드를 생성하려고하십니까? –

+0

그것이 문제입니다. 값을 테이블에서 가져 와서 프로그래머가 선택에서 선택할 수 있도록 클래스 속성에로드해야합니다. –

+0

코드가 컴파일되면 값이 변경되지 않습니까? –

답변

-1

코드를 컴파일 한 후에 값이 변경되지 않으면 코드를 자동으로 생성하는 것이 가장 좋은 방법 인 것처럼 들립니다. 예를 들어,이 같은 수행하는 간단한 응용 프로그램을 작성할 수 있습니다 : 그것은 때마다 자동으로 실행되도록 다음

Public Shared Sub Main() 
    Dim builder As New StringBuilder() 
    builder.AppendLine("' Auto-generated code. Don't touch!! Any changes will be automatically overwritten.") 
    builder.AppendLine("Public Enum FileType") 
    For Each pair As KeyValuePair(Of String, Integer) In GetFileTypesFromDb() 
     builder.AppendLine(String.Format(" {0} = {1}", pair.Key, pair.Value)) 
    End For 
    builder.AppendLine("End Enum") 
    File.WriteAllText("FileTypes.vb", builder.ToString()) 
End Sub 

Public Function GetFileTypesFromDb() As Dictionary(Of String, Integer) 
    '... 
End Function 

을, 당신은 당신이 당신의 주요 응용 프로그램을 컴파일 프로젝트의 빌드 전 단계로 해당 응용 프로그램을 추가 할 수 있습니다 .

+0

이것은 클래스 라이브러리에있는 클래스 용입니다. 언제이 코드가 실행됩니까? 클래스가 업데이트되거나 참조 될 때마다? –

+0

데이터베이스를 업데이트 한 후 클래스 라이브러리를 수동으로 다시 컴파일해야합니다. –

+0

데이터의 기본 소스를 변경하려고 생각하십니까? 소스 코드가 데이터의 공식 기본 위치라면, 소스 코드가 변경되면 데이터베이스를 자동으로 업데이트하는 것이 문제가 될 수 있습니다. 또는 코드에 목록이 있어야하는 경우 데이터베이스 테이블을 모두 삭제할 수 있습니다. –

1

귀하의 질문에 대한 답변을 드릴 수 있을지 모르겠지만 그 문제에 대한 제 의견은 있습니다. 나는 enum을 좋아하는데, 그 이유는 주로 프로그래머 인 나에게 편리하기 때문이다. 이것은 코드를 작성할 때 상수 값을 사용하여 열거 형을 사용하면 열 때 자동 완성뿐만 아니라 유효한 열거 형 값만 제공 할 수 있는지 확인하는 컴파일 시간 오류 검사를 제공하기 때문입니다. 그러나 enum은 런타임 정의 값에 대해서는 작동하지 않습니다. 왜냐하면 컴파일 타임 정의 상수가 있기 때문입니다.

일반적으로 예제에서와 같이 SQL 테이블에서로드되는 유연한 값을 사용할 때 문자열 값만 사용합니다. 그래서 SalesSalesOldType을 테이블에 저장하고 FileType 값으로 사용합니다. 나는 보통 문자열을 사용하고 정수는 아닙니다. 왜냐하면 뭔가를 디버깅하는 동안 데이터 테이블을보고 있으면 문자열이 사람이 읽을 수 있기 때문입니다. 이제

, 당신은 그렇다고이 같은 값을 저장하고 테이블에서 올 수 있도록하지만, 코드에서 상수로 일반적으로 사용되는 값을 정의, 하이브리드 약간의 작업을 수행 할 수 있습니다

Public Class FileTypeConstants 
     public const Sales = "Sales" 
     public const SalesOldType = "SalesOldType" 
End Class 

그 방법을 일반적인 값으로 코딩 할 때 한 자리에 작은 문자열 오타가 있으면 프로그램에서 버그가 발생하지 않도록 할 수 있습니다.

또한 부수적으로 클릭 한번 배포를 통해 회사에 내부적으로 배포 된 코드와 응용 프로그램을 작성하기 때문에 값을 거의 추가 할 수 없기 때문에 드물게 추가 된 값으로 계속 열거 형을 사용합니다. 업데이 트를 밀어. 따라서 데이터베이스 값을 사용하고 열거하는 것에 대한 질문은 사용자에게 업데이트를 가져 오는 것이 얼마나 쉬운 일일 수 있습니다. 업데이트 빈도가 거의없는 경우 데이터베이스 값이 가장 좋을 수 있습니다. 자주 업데이트하고 업데이트를 사용자가 수행하지 않으면 열거 형은 계속 사용할 수 있습니다.

희망 사항 중 일부는 도움이됩니다.

+0

+1. 내 경험에 비추어 볼 때, 문자열은 그대로 작동합니다. 즉, 상응하는 const를 작성하면 결국에는 복잡하게됩니다. – Neolisk

+1

당신은 "유효한 열거 형 값만 줄 수 있는지 컴파일 시간 오류 검사"라고 말했지만 사실이 아니기 때문에 열거 형 변수를 항상 정수 값으로 설정할 수 있습니다. –

+0

@StevenDoggart, 맞습니다. 기술적으로는 정확합니다. 가장 정확합니다. 필자는'FileType = "Slase"','FileType = FileType.Slase'가 컴파일조차되지 않는 곳에 쓰는 것이 더 가능할 것이라고 생각합니다. – Kratz

관련 문제