0

アプリケーションの単純なキャッシュ クラスに取り組んでいます。

using System;
namespace Program {
  public class Cache {
    public delegate int CacheMethodInt();
    public static int Get(CacheMethodInt method) {
      //todo: generate cachekey here
      return method.Invoke();
    }
  }

  public class Calculator {
    public int Add(int x, int y) {
      return x + y;
    }
  }

  class Program {
    static void Main(string[] args) {
      Calculator c = new Calculator();
      Console.WriteLine(Cache.Get(() => c.Add(1, 2)));
    }
  }
}

Cache:Get戻り値が既にキャッシュされているかどうかを確認し、キャッシュされている場合はメソッドを呼び出さずに返す必要があります。問題は、適切なキャッシュキーを生成する方法がわからないことです。この場合、私は次のようなものが欲しいです:

Calculator:Add:1(int):2(int)

でこの情報を取得することは可能Cache:Getですか? .NET 2.0 を使用しています。

4

1 に答える 1

1

リフレクションを使えば可能です。

別の方法として、プロジェクトで Postsharp を同じ目的で使用しました。より一般的で一般的なアプローチの利点として

また、キャッシュの無効化または有効期限についても忘れないでください。

関連する質問は、MethodInfo とメソッド名を取得する方法を示しています。

匿名メソッドで MethodInfo.GetCurrentMethod() を使用する

MethodInfo があれば、必要なものをすべて取得できます

于 2012-07-19T16:53:28.600 に答える