0
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 等,所以我可能无法设置任何通用约束。

请帮忙。

4

3 回答 3

5

扩展方法怎么样:

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

这样你就可以

this.GetLogger()
于 2012-04-28T01:01:44.237 回答
1

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

于 2012-04-28T01:02:16.740 回答
0

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

private Logger Logger {
   get {
      return new Logger<TestClass1>();
   }
}
于 2012-04-28T01:05:07.513 回答