自动将泛型的类名推断为 T

本文关键字:泛型 | 更新日期: 2023-09-27 18:32:26

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");

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

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

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

请帮忙。

自动将泛型的类名推断为 T

扩展方法怎么样:

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

所以你可以

this.GetLogger()

泛型类型约束呢?http://msdn.microsoft.com/en-us/library/bb384067.aspx

这是建立私有财产的时候了。 然后,您可以让您的开发人员执行this.Logger.Log(blah)

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