2013-12-20 50 views
0

首先抱歉混淆的標題,我可以找到確切的話來描述的情況。但它很容易通過一個例子來理解。如何「擴展」一個類,使其變量可以返回一個前綴的值爲

我們必須保存表名作爲目錄這樣的靜態類:

public static class Tables 
    { 
      public const string Employees= "DBEmploy1"; 
      public const string Sales = "Sale1"; 
      (...etc) 
    } 

而在我們的代碼中使用它們像這樣:

string sql="select name, surname from " + Tables.Employees + " where code='1'" 

但有時我們需要的前綴數據庫連接或其他前綴/後綴到表中。目前的解決辦法是宣佈第二表目錄:

public static class CurrentDB1Prefix="[databasex].dbo." 

public static class Tables 
     { 
       public const string Employees= "DBEmploy1"; 
       public const string Sales = "Sale1"; 
       (...etc) 
     } 
public static class TablesP 
     { 
       public static readonly string Employees= CurrentDB1Prefix + Employees; 
       public static readonly string Sales = CurrentDB1Prefix + Sales; 
       (...etc) 
     } 

而且在我們的代碼使用它們,如:

string sql="select name, surname from " + TablesP.Employees + " where code='1'" 

省力保持2表列表,我們願做這樣的事情:

public static class CurrentDB1Prefix="[databasex].dbo." 
public static class Tables 
{ 
        public const string Employees= "DBEmploy1"; 
        public const string Sales = "Sale1"; 
        (...etc) 
} 
public static class TablesP 
{ 
    //this would return the above Table class variables with the prefixes somehow 
    return CurrentDB1Prefix + Table.TableVariablex; 
} 

這怎麼辦?或者可以使用一些近似值?

回答

1

請勿使用static,也不要使用const。通過將字段轉換爲屬性來使值運行時變化。就像這樣:

public class Tables 
{ 
    public string CurrentPrefix = ...; 
    public string Employees { get { return CurrentPrefix + "DBEmploy1" }; 
    //(...etc) 
} 
+0

重要的是,我們希望有2個選項,表得到沒有前綴和TablesP表名與前綴(僅在第一個做mainteinance) – VSP

+0

@讓他們ase69s什麼阻止你這樣做?創建第二個類TablesP,或者創建採用'bool applyPrefix'參數的屬性方法。 – usr

+0

作爲semiconstant(當前前綴只在程序啓動時分配,並且以後沒有更改)的東西,我想使用最輕量級的選項(如const),因此它不必在每次訪問第二個類時計算它,而且我要確保第一個類中的每個變量都有第二個類中的對應元素(例如,如果您不使用其子元素,則使用抽象或接口來警告您) – VSP

相關問題