DynamicProxy クラスがどのように使用されているか、およびそれらがインテリセンスをサポートしているかどうかについて、率直な答えを探しています。
DynamicProxy クラスがどのように機能するかを説明することで、クラスがタイプ セーフである理由と、インテリセンスとうまく連携できる理由を明確に理解できます。
まず、DynamicProxy が実際に何であるかを理解しましょう。プロキシ クラスは、別のクラスに代わってメンバー呼び出しを処理するクラスです。これは、継承 (最も一般的) または構成によって行われます。したがって、プロキシ クラスを手書きすると、次のようになります。
public class Customer
{
public virtual string Name { get; set; }
// etc...
}
public class CustomerProxy : Customer
{
public override string Name
{
get
{
// Do additional functionality...
return base.Name;
}
set
{
// Do additional functionality...
base.Name = value;
}
}
}
この適切な動作には、継承とポリモーフィズムという 2 つの重要な機能が重要な役割を果たします。したがって、Customer
クラスをシームレスに使用するには、 はProxyGenerator
単純にクラスのインスタンスを作成しますが、CustomerProxy
それを の型として返しCustomer
ます。基本的には を行うのと同じことCustomer customer = new CustomerProxy();
です。「動的」部分は実際には .NET キーワードとは何の関係もありませんがdynamic
、代わりに「ランタイム」と読む必要があります。これは、プロキシ クラスが実行時 (アプリケーションの実行中) ではなく、実行時に生成されることを単に意味するためです。コンパイル時。ああ、これがどのように行われるのか疑問に思っている場合は、次を使用しますSystem.Reflection.Emit
それが a の単純なバージョンDynamicProxy
です。これらのプロキシ クラスの作成に関しては、さまざまなフレームワークがさまざまな機能を提供します。たとえば、Castle Windsor の DynamicProxy では、Mixin を作成し、これらのプロキシ クラスに追加のインターフェイスを適用できます。つまり、生成されたプロキシ クラスはpublic class CustomerProxy : Customer, ISomeInterface { ... }
、Customer
クラス自体がISomeInterface
. これは、Castle の DynamicProxy の非常に優れたリソースです ( http://kozmic.net/dynamic-proxy-tutorial/ )。さまざまな機能とそれらの機能の使用例について説明します。