2012-09-24 69 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++; 
    } 
} 

像这样的东西应该工作!