C# Reflection 反射

來源:互聯網
上載者:User
在沒使用反射之前,跨項目級的調用普遍的做法是項目級添加引用。

舉例:Client 類調用 MysqlHelper 類的話

  1. 首先產生 MysqlHelper 項目,

  2. 然後在 Client 類中添加 MysqlHelper.dll,

  3. 接著在 Client 的方法中執行個體化,然後調用方法。

使用反射後,可以更加靈活配置,靈活使用。

如,用戶端要調用資料庫介面,資料庫這裡我們不明確寫寫入程式碼哪一個資料庫(MySQL, SQLServer, Oracle…)

這裡先定義介面,假設該介面只有一個方法 Query() ,各種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");        }    }}

Client 端 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();}

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 反射的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.