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

次の 2 行のコードを試しましたが、うまくいきません。

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 に答える