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等等所以我可能无法放置任何通用约束。
请帮忙。
答案 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>();
}
}