C#提高-------------------Module的使用


 如果沒有看《C#反射(一)》、建議先看《C#反射(一)》再看這一篇。上一篇文章發表,有人評論我所寫的東西比較基礎。其實我也知道我也只不過是在寫最基礎的語法而已,之所以寫它是因為自己學編程學了一兩年之后才接觸到反射,相信會有很多人跟我有過同樣的經歷。概其原因,書店里幾乎90%的書籍都不談反射。還有,曾經在百度、goole搜索過反射,但也很難找到自己喜歡的答案。希望我所寫的東西能為那些初學編程的新手有所幫助。

我不想在這里過多的描述反射的概念。我還是用我自己覺得最簡單、最直接的語言來描述反射——“反射就是一種機制,通過這種機制,我們能知道一些位知程序集的詳細信息!”;通過上一篇我們已經學會如何得到一個未知程序集的相關信息,接下來我要講的是如何知道未知程序模塊的信息:

模塊信息是通過Module類訪問的。下面通過一個類子,講解下Module類的使用,如果你是一個用心的程序員,應該了解下Module的詳細信息。

還是繼續使用C#反射(一)的類子。下面我們寫一個新的文件ModuleDemo.cs。內容如下:

//編譯命令 csc /r:Sport.dll ModuleDemo.cs

using System;

using System.Reflection;

 

public class ModuleDemo

{

   public static void Main(string[] args)

   {

    //=======================

    // Am Module object is obtained representing the

    // SomeSports.dll library file

    //=======================

 

    Assembly assembly = Assembly.Load("SomeSports");

    Module module = assembly.GetModule("SomeSports.dll");

 

    //======================

    //Search the module for the type named "Football"

 

    Type[] types = module.FindTypes(Module.FilterTypeName,"Football");

 

    if(types.Length != 0)

    {

       ConstructorInfo ci = types[0].GetConstructor(new Type[0]);

       Sport sport = (Sport)ci.Invoke(new Object[0]);

 

       Console.WriteLine(sport.GetName() + " has "+sport.GetDuration());

    }

    else

    {

       Console.WriteLine("type not found");

    }

   }

}

我們用csc /r:Sport.dll ModuleDemo.cs編譯,然后用MouduleDemo運行程序就能看到如下輸出:Football has four 15 minute quarters。

    關於C#反射的基礎知識,還有一個知識點就是訪問未知對象的類型信息。在下一篇我將介紹它,並介紹我自己曾經寫過的一個應用,可以實現具有相同屬性或域名的不同類型對象之間的數據相互復制(在Java中可用於J2EE中POJO到Form Bean之間的數據復制)。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM