ホームページ  >  記事  >  バックエンド開発  >  C# リフレクション リフレクション

C# リフレクション リフレクション

黄舟
黄舟オリジナル
2017-02-06 17:16:361225ブラウズ

リフレクションが使用される前は、プロジェクト間レベルの呼び出しの一般的な方法は、プロジェクト レベルで参照を追加することでした。

例: Client クラスが MysqlHelper クラスを呼び出す場合

  1. まず MysqlHelper プロジェクトを生成し、

  2. 次に MysqlHelper.dll を Client クラスに追加し、

  3. それから Client メソッドでインスタンス化してから、メソッドを呼び出します。

リフレクションを使用した後は、より柔軟に設定して使用することができます。

C# リフレクション リフレクション

上の図に示すように、クライアントはデータベース インターフェイスを呼び出す必要があります。ここでどのデータベースをハードコーディングするかはわかりません (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# リフレクション リフレクション

上記はC# Reflectionリフレクションの内容です。その他の関連コンテンツについては、PHPの中国語Webサイト(www)を参照してください。 .php.cn)!


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。