最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#中的程序集和反射介紹

 更新時(shí)間:2015年01月05日 12:22:46   投稿:junjie  
這篇文章主要介紹了C#中的程序集和反射介紹,程序集包含資源文件,類型元數(shù)據(jù)、IL代碼,每個(gè)程序集都有自己的名稱、版本等信息,反射就是動(dòng)態(tài)獲取程序集中的元數(shù)據(jù)的功能,需要的朋友可以參考下

什么是程序集?

1.程序集(assembly)是一個(gè)及一個(gè)以上托管模塊,以及一些資源文件的邏輯組合。
2.程序集是組件復(fù)用,以及實(shí)施安全策略和版本策略的最小單位。
3.程序集是包含一個(gè)或者多個(gè)類型定義文件和資源文件的集合。在程序集包含的所有文件中,有一個(gè)文件用于保存清單。(清單是元數(shù)據(jù)部分中一組數(shù)據(jù)表的集合,其中包含了程序集中一部分文件的名稱,描述了程序集的版本,語(yǔ)言文化,發(fā)布者,共有導(dǎo)出類型,以及組成該程序集的所有文件)。
4、在編譯應(yīng)用程序中,所創(chuàng)建的CIL代碼存儲(chǔ)在一個(gè)程序集中,程序集包括可執(zhí)行的應(yīng)用程序文件(.exe擴(kuò)展名文件)和其他應(yīng)用程序使用的庫(kù)(.dll擴(kuò)展名文件)。

作為一個(gè)單元進(jìn)行版本控制和部署的一個(gè)或多個(gè)文件的集合。程序集是.NETFramework 應(yīng)用程序的主要構(gòu)造塊。所有托管類型和資源都包含在某個(gè)程序集內(nèi),并被標(biāo)記為只能在該程序集的內(nèi)部訪問(wèn),或者被標(biāo)記為可以從其他程序集中的代碼訪問(wèn)。程序集在安全方面也起著重要作用。代碼訪問(wèn)安全系統(tǒng)使用程序集信息來(lái)確定為程序集中的代碼授予的權(quán)限集。

程序集是.NET Framework編程的基本組成部分。(此上是在百度百科的定義)
簡(jiǎn)單的說(shuō),net中的dll和exe文件都是程序集

程序集包含資源文件,類型元數(shù)據(jù)(描述在代碼中定義的每一類型和成員,二進(jìn)制形式)、IL代碼(這些都被裝在exe或dll中),每個(gè)程序集都有自己的名稱、版本等信息。這些信息可以通過(guò)AssemblyInfo.cs文件來(lái)自己定義。

復(fù)制代碼 代碼如下:

using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

// 有關(guān)程序集的常規(guī)信息通過(guò)以下
// 特性集控制。更改這些特性值可修改
// 與程序集關(guān)聯(lián)的信息。
[assembly: AssemblyTitle("AssemblyDemo")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("AssemblyDemo")]
[assembly: AssemblyCopyright("Copyright ©  2013")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

// 將 ComVisible 設(shè)置為 false 使此程序集中的類型
// 對(duì) COM 組件不可見(jiàn)。如果需要從 COM 訪問(wèn)此程序集中的類型,
// 則將該類型上的 ComVisible 特性設(shè)置為 true。
[assembly: ComVisible(false)]

// 如果此項(xiàng)目向 COM 公開(kāi),則下列 GUID 用于類型庫(kù)的 ID
[assembly: Guid("e7da9959-0c97-444c-aa40-6d9bbf728068")]

// 程序集的版本信息由下面四個(gè)值組成:
//
//      主版本
//      次版本
//      內(nèi)部版本號(hào)
//      修訂號(hào)
//
// 可以指定所有這些值,也可以使用“內(nèi)部版本號(hào)”和“修訂號(hào)”的默認(rèn)值,
// 方法是按如下所示使用“*”:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

AssemblyInfo.cs

使用程序集的優(yōu)點(diǎn):

程序只需要應(yīng)用必要的程序集,減少了編碼量(例如log4net.dll),程序的尺寸 。
可以在程序集中封裝一些代碼,提供必要的接口,供引用該程序集的項(xiàng)目使用。   

反射

提到程序集,就不得不說(shuō)反射。反射就是動(dòng)態(tài)獲取程序集中的元數(shù)據(jù)(提供程序集的類型信息)的功能。也就是動(dòng)態(tài)獲取程序集中的元數(shù)據(jù)來(lái)操作類型的。比如咱們使用的vs中的智能提示,就是通過(guò)反射獲取類的方法、屬性的。

Type類是實(shí)現(xiàn)反射的一個(gè)很重要的類,通過(guò)它我們可以獲取類中的所有信息包括方法、屬性等??梢詣?dòng)態(tài)調(diào)用類的屬性機(jī)及方法。

Type是對(duì)類的描述。

一個(gè)簡(jiǎn)單的例子新建一個(gè)類庫(kù)MyAssembly添加Person類,生成:

復(fù)制代碼 代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace MyAssembly
{
    public class Person
    {
        private string name;
 
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        private int age;
 
        public int Age
        {
            get { return age; }
            set { age = value; }
        }
        private string gender;
 
        public string Gender
        {
            get { return gender; }
            set { gender = value; }
        }
        public Person(string name, int age, string gender)
        {
            this.name = name;
            this.age = age;
            this.gender = gender;
        }
        public void SayHi()
        {
            Console.WriteLine("大家好,我是{0},今年{1}歲了。",this.name,this.age);
        }
    }
}

新建一個(gè)控制臺(tái)項(xiàng)目AssemblyDemo,將MyAssembly.dll復(fù)制到控制臺(tái)bin/debug下,接下來(lái)通過(guò)動(dòng)態(tài)加載程序集MyAssembly.dll獲取該程序集下person類的屬性和方法。代碼如下:

復(fù)制代碼 代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Reflection;

namespace AssemblyDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            //通過(guò)反射動(dòng)態(tài)調(diào)用另一個(gè)程序集中的方法
            //1加載程序集
            string path = AppDomain.CurrentDomain.BaseDirectory;//獲取當(dāng)前.exe執(zhí)行文件的路徑
            path = Path.Combine(path, "MyAssembly.dll");//拼接程序集的路徑
            Assembly assembly = Assembly.LoadFile(path);
            //2創(chuàng)建Person類的對(duì)象
            Type type = assembly.GetType("MyAssembly.Person");
            object o = Activator.CreateInstance(type,"wolf",22,"未知");//實(shí)例化
            //3獲取方法的類型
            MethodInfo methodInfo = type.GetMethod("SayHi");
            //4反射調(diào)用方法
            methodInfo.Invoke(o, null);
            Console.Read();
        }
    }
}

結(jié)果:

未完待續(xù)。。。。。

相關(guān)文章

  • C# 多線程并發(fā)編程基礎(chǔ)小結(jié)

    C# 多線程并發(fā)編程基礎(chǔ)小結(jié)

    本文主要介紹了C# 多線程并發(fā)編程基礎(chǔ)小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • C#實(shí)現(xiàn)復(fù)制文件夾中文件到另一個(gè)文件夾的方法

    C#實(shí)現(xiàn)復(fù)制文件夾中文件到另一個(gè)文件夾的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)復(fù)制文件夾中文件到另一個(gè)文件夾的方法,實(shí)例分析了C#實(shí)現(xiàn)文件夾的查找、判斷及文件復(fù)制相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • 基于C#實(shí)現(xiàn)員工IC卡的讀寫功能

    基于C#實(shí)現(xiàn)員工IC卡的讀寫功能

    這篇文章主要為大家詳細(xì)介紹了C#如何實(shí)現(xiàn)讀寫員工IC卡的功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-01-01
  • C#使用throw和throw ex的區(qū)別小結(jié)

    C#使用throw和throw ex的區(qū)別小結(jié)

    本文主要介紹了C#使用throw和throw ex的區(qū)別小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • C#?將?Stream?保存到文件的方法

    C#?將?Stream?保存到文件的方法

    這篇文章主要介紹了C#將?Stream保存到文件的方法,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-08-08
  • c# 獲取機(jī)器唯一識(shí)別碼的示例

    c# 獲取機(jī)器唯一識(shí)別碼的示例

    這篇文章主要介紹了c# 獲取機(jī)器唯一識(shí)別碼的示例,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-03-03
  • C#實(shí)現(xiàn)將json轉(zhuǎn)換為DataTable的方法

    C#實(shí)現(xiàn)將json轉(zhuǎn)換為DataTable的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)將json轉(zhuǎn)換為DataTable的方法,涉及C#操作json及DataTable的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • C# 中的委托與事件實(shí)現(xiàn)靈活的回調(diào)機(jī)制(應(yīng)用場(chǎng)景分析)

    C# 中的委托與事件實(shí)現(xiàn)靈活的回調(diào)機(jī)制(應(yīng)用場(chǎng)景分析)

    委托提供了一種類型安全的方式將方法作為參數(shù)傳遞,而事件則允許對(duì)象通知其他對(duì)象發(fā)生了某些事情,這篇文章主要介紹了C# 中的委托與事件實(shí)現(xiàn)靈活的回調(diào)機(jī)制,需要的朋友可以參考下
    2024-12-12
  • C#中var關(guān)鍵字用法分析

    C#中var關(guān)鍵字用法分析

    這篇文章主要介紹了C#中var關(guān)鍵字用法,實(shí)例分析了C#中var關(guān)鍵字的應(yīng)用場(chǎng)合,對(duì)于.NET的學(xué)習(xí)具有一定參考價(jià)值,需要的朋友可以參考下
    2014-12-12
  • C#正則過(guò)濾HTML標(biāo)簽并保留指定標(biāo)簽的方法

    C#正則過(guò)濾HTML標(biāo)簽并保留指定標(biāo)簽的方法

    這篇文章主要介紹了C#正則過(guò)濾HTML標(biāo)簽并保留指定標(biāo)簽的方法,涉及C#針對(duì)頁(yè)面HTML元素正則匹配與替換相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06

最新評(píng)論

蕉岭县| 万载县| 图片| 莱芜市| 东乌珠穆沁旗| 开江县| 南平市| 鄂州市| 建平县| 宝兴县| 冀州市| 湟中县| 民权县| 新宾| 宾阳县| 武功县| 江山市| 吕梁市| 乌拉特后旗| 鄂伦春自治旗| 嘉鱼县| 黔西县| 枣强县| 手机| 兴义市| 上思县| 南康市| 杨浦区| 和林格尔县| 德阳市| 天门市| 长宁区| 安岳县| 双峰县| 广平县| 彝良县| 福清市| 宿松县| 彭州市| 鄂托克旗| 胶南市|