自动将泛型的类名推断为 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等。 所以我可能无法放置任何通用约束。
请帮忙。
扩展方法怎么样:
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>();
}
}