2012-09-24 106 views
0

我想根據對象的類型生成一個名稱。在我的系統,我有,使用泛型的名稱生成器

class Employee {} 

Class ContractEmp:Employee{} 

class Manager:Employee{} 

我想生成的名字看起來像ContractEmp1其中1將來自增量。我正在嘗試使用泛型。

任何幫助

謝謝

+1

你爲什麼試圖用泛型來做這樣的事情? – Oded

+0

泛型,因爲這段代碼對於所有類型都是相同的。 – Harsha

回答

1

有了你可以做這樣的事情的擴展方法:

public static class NameExtension 
{ 
    private static Dictionary<string, int> counters = new Dictionary<string, int>(); 
    public static string MakeUpName<T>(this T @object) 
    { 
     var t = typeof(T); 
     if (! counters.ContainsKey(t.FullName)) 
      counters[t.FullName] = 0; 

     return t.Name + counters[t.FullName]++; 
    } 
} 

測試:

[TestFixture] 
class NameTest 
{ 
    [Test] 
    public void test() 
    { 
     Console.WriteLine(new NameTest().MakeUpName()); 
     Console.WriteLine(new NameTest().MakeUpName()); 
     Console.WriteLine(new NameTest().MakeUpName()); 
     Console.WriteLine(new NameTest().MakeUpName()); 
    } 
} 

輸出:

NameTest0
NameTest1
NameTest2
NameTest3

+0

你好,感謝代碼。現在的代碼與您所寫的代碼類似。但是在多會話應用程序中,當我創建另一個對象時(比如Nametest),字符串是根據以前的會話數據創建的。但我會檢查你的代碼。再次感謝 – Harsha

+0

然後,您需要使其成爲非靜態的(並且不使用擴展方法),併爲每個會話創建一個新的名稱生成器。 – Svish

+0

此外,你應該分享你已經寫在你的問題上的代碼,並解釋你有什麼問題。 – Svish

0

您可以在其中得到每個構造函數調用遞增Employee類使用私有靜態詮釋。將此數字與typeof(this).Name值組合,可以按照描述生成名稱。請注意,櫃檯將計入所有員工擴展班級,所以如果您想爲每個員工擴展班級連續列出數字,則應爲每個擴展班級實施特定的計數器。此外,每次應用程序重新啓動時,計數器都將設置爲零。

0
public Class ContractEmp:Employee{ 
    private static int counter = 1; 
    private String name = ""; 

    public ContractEmp() { 
     name = typeof(this).Name + counter++; 
    } 
} 

像這樣的東西應該工作!