自动将类名称推断为T作为泛型

时间:2012-04-28 00:57:41

标签: c# asp.net

public class TestClass1
{
    public void TestMethod1()
    {
        new Logger<TestClass1>().Log(LogType.Info, "FROM TESTCLASS1.TESTMETHOD1");
    }
}

在实例化 Logger 并将 TestClass1 作为通用T 传递时,如果开发人员输入其他内容而非相反,则可能会出现问题到TestClass1。例如,以下代码行可能是问题

new Logger<Test123>().Log(LogType.Info, "FROM TESTCLASS1.TESTMETHOD1");

如何编写以下代码行,它会自动推断 TestClass1 并传递它?

new Logger<TestClass1>().Log(LogType.Info, "FROM TESTCLASS1.TESTMETHOD1");

我尝试了以下两行代码,但没有运气。

new Logger<this>().Log(LogType.Info, "FROM TESTCLASS1.TESTMETHOD1");
new Logger<this.GetType>().Log(LogType.Info, "FROM TESTCLASS1.TESTMETHOD1");

更新 通过我的应用程序,我可以传递任何类,如TestClass1,MyClass123等等所以我可能无法放置任何通用约束。

请帮忙。

3 个答案:

答案 0 :(得分:5)

扩展方法怎么样:

public static Logger<T> GetLogger<T>(this T obj)
{
    return new Logger<T>();
}

所以你可以

this.GetLogger()

答案 1 :(得分:1)

答案 2 :(得分:0)

这是制作私人财产的时候。然后,您可以让您的开发人员this.Logger.Log(blah)

private Logger Logger {
   get {
      return new Logger<TestClass1>();
   }
}