首頁  >  文章  >  後端開發  >  C# Reflection 反射

C# Reflection 反射

黄舟
黄舟原創
2017-02-06 17:16:361213瀏覽

在沒有使用反射之前,跨項目級的呼叫普遍的做法是項目級添加引用。

舉例:Client 類別呼叫 MysqlHelper 類別的話

    然後在 Client 類別中新增 MysqlHelper 項目,
  1. 然後在 Client 類別中加入 MyHelper.dll,
  2. 使用反射後,可以更有彈性配置,靈活使用。
如上圖,客戶端要調用資料庫接口,資料庫這裡我們不明確寫硬編碼哪一個資料庫(MySQL, SQLServer, Oracle…)

這裡先定義接口,假設該接口只有一個方法 Query() ,各種DB需要實作該接口,那麼新加入的DB類型就不會影響到原來項目,這樣就實現開放封閉原則(對修改關閉,對擴充開放)。

C# Reflection 反射介面類別 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");
        }
    }
}

Client 端Program.cs 調用:端的資料庫幫助目錄然後在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();
}

Client 端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 反射的內容,更多相關內容,更多相關內容。 !

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn