2016-12-24 4 views
0

우리 솔루션에서 사용할 모든 상수를 포함하는 클래스를 정의한다고 가정 해보십시오. 그리고이 수업에는 어떤 방법도 없습니다. 우리가 알고있는클래스의 속성을 어떻게 분류 할 수 있습니까?

public class _const 
{ 
    /// Group1: 'DataBase'. We naming "db" group 
    public const Server_Name = 'ServerName'; 
    public const DB_Name = 'DBName'; 
    public const DB_User = 'UserName'; 
    public const DB_Password = 'Password'; 

    /// Group2: 'Default Variable'. We naming "default" group 
    public const Title= 'DefaultTitle'; 
    public const KeyWord = 'DefaultKeyWord'; 

    /// Group3: 'Status' constans.We naming "status" group 
    public const Approved = 'Approved'; 
    public const Rejected = 'Rejected'; 
    public const Suspended = 'Suspended'; 

    /// And so on... 
    /// ... 
    /// ... 
    /// ... 
} 

는, 이러한 상수는 단순히 아래 명령과 솔루션 어디서나 사용됩니다. 그리고 클래스의 인스턴스를 만들 필요가 없습니다.

/// For example: 
string x = _const.Approved; 

내 질문은 : 쉽게 사용하고 더 많은 코드의 가독성을 위해 함께 관련 상수를 그룹화하는 방법이 있습니까? 그리고 자신의 접두사 이름 (네임 스페이스와 같은)을 가진 각 그룹에 대한 액세스?

다음 코드와 유사합니다.

/// For example: 
string x = _const.db.DB_Name; 
string y = _const.default.KeyWord; 
string z = _const.status.Approved; 
+0

_const 클래스에서 내부 클래스를 정의하여 하위 클래스를 만들 수 있습니다. – AFract

+1

(거의) 관련이없는 메모에는 '승인 됨'값이 '승인 됨'인 상수를 정의하면 아무런 이점이 없습니다. 반대로 "DB_Name"과 같은 것을 상수로 사용하고 싶지는 않지만 구성 가능합니다. 귀하의 질문에 대한 대답이있는 동안, 나는 상상력이 너무 풍부하여 조직의 수준 *이 필요한 프로젝트를 보지 못했습니다 (그리고 결코 프로젝트를 보지 않기를 바랍니다). 그리고 모든 것을 하나의 클래스로 그룹화하는 것은 대부분의 소프트웨어에서 끔찍한 아이디어입니다. 그들이 자연스럽게 그룹화되어 있다면, 함께 강요하는 대신에 혼자서 사용하지 않겠습니까? –

+0

클래스 대신 Structs를 사용할 수 있습니다. – Cybrus

답변

1

당신은 당신의 클래스는 정적하고이 같은 다른 중첩 정적 클래스 정의 할 수 있습니다 :

public static class Constants 
{ 
    public static class Group1 
    { 
     internal const string String1 = "String1"; 
    } 
} 

internal class Program 
{ 
    internal static void Main() 
    { 
     Console.WriteLine(Constants.Group1.String1); 
    } 
} 
2

을 내가 EnumDictionary의 혼합은, 때문에 당신을 도울 수있을 것 좀 더 자세한 호출로하지만,

:

public enum Db 
{ 
    Server_Name, 
    DB_Name, 
    DB_User, 
    DB_Password, 
} 


public enum Default 
{ 
    Title, 
    Keyword 
} 


public enum Status 
{ 
    Approved, 
    Rejected, 
    Suspened 
} 

public static class _const 
{ 
    public static Dictionary<Db, string> db = new Dictionary<Db, string>() 
    { 
     {Db.Server_Name, "ServerName"}, 
     {Db.DB_Name, "DBName"}, 
     {Db.DB_User, "UserName"}, 
     {Db.DB_Password, "Password"} 

    }; 


    public static Dictionary<Default, string> defaults = new Dictionary<Default, string>() 
    { 
     {Default.Title, "DefaultTitle"}, 
     {Default.Keyword, "DefaultKeyWord"} 
    }; 


    public static Dictionary<Status, string> status = new Dictionary<Status, string>() 
    { 
     {Status.Approved, "Approved"}, 
     {Status.Rejected, "Rejected"}, 
     {Status.Suspened, "Suspended"} 
    }; 
} 

당신이 좋아하는 코드에서 사용할 수 있습니다 : 그것은 당신의 코드 전반에 걸쳐 일관성을 보장

string string_x = _const.db[Db.Server_Name]; 
string string_y = _const.defaults[Default.Keyword]; 
string string_z = _const.status[Status.Suspened]; 
+0

당신의 답으로, 순수한 상수의 이점은 사라질 것입니다. 즉, 클래스는 정적이거나 클래스의 인스턴스를 만들어야합니다. 또한 두 가지면에서이 객체는 런타임 변수입니다. –

+1

나는 당신의 질문에 "쉬운 사용과 더 많은 코드 가독성"을 강조했다. 'Enum'은 코더와 그의 클래스 사용자의 삶을 더 편하게하고 코드를 읽기 쉽도록 만든다. 약간의 추가 코딩을 희생하여 한 번 설정하고 영원히 사용하십시오.하지만 당신의 주된 이슈가 _pure_ 상수의 사용이라면 이것은 방법이 아닙니다. – user3598756

+0

당신의 의견을 수락합니다. 따라서 나는 당신의 의견을 표명합니다. 나는 약간의 오해와 함께 나의 생각을 기술했다. 'Pure Constant'는 내 문제가 아닙니다. 사실, 클래스에서 인스턴스를 만들거나 런타임 객체를 사용하지 않으려합니다. 마침내, 나는 당신이 옳다고 생각하고 enum을 사용하는 것이 상수보다 낫다. –

관련 문제