リフレクションが使用される前は、プロジェクト間レベルの呼び出しの一般的な方法は、プロジェクト レベルで参照を追加することでした。
例: Client クラスが MysqlHelper クラスを呼び出す場合
まず MysqlHelper プロジェクトを生成し、
次に MysqlHelper.dll を Client クラスに追加し、
それから Client メソッドでインスタンス化してから、メソッドを呼び出します。
リフレクションを使用した後は、より柔軟に設定して使用することができます。
上の図に示すように、クライアントはデータベース インターフェイスを呼び出す必要があります。ここでどのデータベースをハードコーディングするかはわかりません (MySQL、SQLServer、Oracle...)
インターフェイスが最初に定義されていると仮定します。インターフェイスには Query() メソッドが 1 つだけあり、さまざまな DB がこのインターフェイスを実装する必要がある場合、新しく追加された DB タイプは元のプロジェクトに影響を与えず、オープンとクローズの原則 (変更に対してクローズ、拡張に対してオープン) が実現します。
インターフェイス クラス DbHelper.cs
using System; namespace IHelper { public class DbHelper { public DbHelper() { Console.WriteLine("This is DbHelper construction"); } public virtual void Query() { Console.WriteLine("This is query method"); } } }
OracleDbHelper.cs
using System; using IHelper; namespace OracleHelper{ public class OracleDbHelper : DbHelper { public override void Query() { base.Query(); Console.WriteLine("This is query from OracleDbHelper"); } } }
MySqlDbHelper.cs
using System; using IHelper; namespace MySqlHelper{ public class MySqlDbHelper :DbHelper { public override void Query() { base.Query(); Console.WriteLine("This is query method from MySqlDbHelper"); } } }
クライアント側 Program.cs 呼び出し:
データベース ヘルプ クラス プロジェクトによって生成された dll および pdb ファイルをクライアントの bin ディレクトリに置きます。 App.config に構成を追加し、Reflection の下の Assembly クラスを使用して実装します。
Program.cs
static void Main(string[] args){ string config = ConfigurationSettings.AppSettings["DbHelper"]; Assembly assembly = Assembly.Load(config.Split(',')[0]); Type typeHelper = assembly.GetType(config.Split(',')[1]); Object oHelper = Activator.CreateInstance(typeHelper); DbHelper dbHelper = (DbHelper) oHelper; dbHelper.Query(); Console.Read(); }
クライアント側のApp.config構成:
<?xml version="1.0" encoding="utf-8" ?><configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <appSettings> <!--<add key="DbHelper" value="MySqlHelper,MySqlHelper.MySqlDbHelper"/>--> <add key="DbHelper" value="OracleHelper,OracleHelper.OracleDbHelper"/> </appSettings></configuration>
実行結果
上記はC# Reflectionリフレクションの内容です。その他の関連コンテンツについては、PHPの中国語Webサイト(www)を参照してください。 .php.cn)!