国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C# 反射機制詳解

這篇具有很好參考價值的文章主要介紹了C# 反射機制詳解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

0. 基礎概念

0.1 什么是反射

Reflection,中文翻譯為反射。
這是.Net中獲取運行時類型信息的方式。

官方定義:
審查元數(shù)據(jù)并收集關于它的類型信息的能力。
元數(shù)據(jù)(編譯以后的最基本數(shù)據(jù)單元)
就是一大堆的表,當編譯程序集或者模塊時,編譯器會創(chuàng)建一個類定義表,一個字段定義表,和一個方法定義表等。

.Net的應用程序的結構由以下幾個部分組成:

  • 程序集(Assembly)

  • 模塊(Module)

  • 類型(class)

C# 反射機制詳解

而反射的層次模型也類似上述結構:

  • 程序集反射
  • 類型反射
  • 類型成員反射

C# 反射機制詳解

而反射提供一種編程的方式,讓程序員可以在程序運行期獲得這幾個組成部分的相關信息。

  • Assembly類
    可以獲得正在運行的裝配件信息,也可以動態(tài)的加載裝配件,以及在裝配件中查找類型信息,并創(chuàng)建該類型的實例。

  • Type類
    可以獲得對象的類型信息,此信息包含對象的所有要素:方法、構造器、屬性等等
    通過Type類可以得到這些要素的信息,并且調用。

  • MethodInfo
    包含方法的信息,通過這個類可以得到方法的名稱、參數(shù)、返回值等等
    并且可以調用。

諸如此類,還有FieldInfo、EventInfo等等,這些類都包含在System.Reflection命名空間下。

0.2 命名空間與裝配件的關系

  • 命名空間類似與Java的包,但又不完全等同
    因為Java的包必須按照目錄結構來放置,命名空間則不需要。
  • 裝配件是.Net應用程序執(zhí)行的最小單位,編譯出來的.dll、.exe都是裝配件。

裝配件和命名空間的關系不是一一對應,也不互相包含
一個裝配件里面可以有多個命名空間,一個命名空間也可以在多個裝配件中存在。

例如:

裝配件A:

namespace  N1
{
      public  class  AC1  {…}
      public  class  AC2  {…}
}
namespace  N2
{
      public  class  AC3  {…}
      public  class  AC4{…}
}

裝配件B:

namespace  N1
{
      public  class  BC1  {…}
      public  class  BC2  {…}
}
namespace  N2
{
      public  class  BC3  {…}
      public  class  BC4{…}
}

這兩個裝配件中都有N1和N2兩個命名空間,而且各聲明了兩個類,這樣是完全可以的

然后我們在一個應用程序中引用裝配件A
那么在這個應用程序中,我們能看到N1下面的類為AC1和AC2,N2下面的類為AC3和AC4。

接著我們?nèi)サ魧的引用,加上對B的引用
那么我們在這個應用程序下能看到的N1下面的類變成了BC1和BC2,N2下面也一樣。

如果我們同時引用這兩個裝配件
那么N1下面我們就能看到四個類:AC1、AC2、BC1和BC2。

裝配件是一個類型 “居住” 的地方,那么在一個程序中要使用一個類,就必須告訴編譯器這個類住在哪兒,編譯器才能找到它,也就是說必須引用該裝配件。

那么如果在編寫程序的時候,也許不確定這個類在哪里,僅僅只是知道它的名稱,就不能使用了嗎?
答案是可以,這就是反射了,就是在程序運行的時候提供該類型的地址,而去找到它。

0.3 使用反射的情景

舉個例子來說明:
很多軟件開發(fā)者喜歡在自己的軟件中留下一些接口,其他人可以編寫一些插件來擴充軟件的功能。

比如我有一個媒體播放器,我希望以后可以很方便的擴展識別的格式,那么我聲明一個接口:

public  interface  IMediaFormat
{
   string  Extension  {get;}
   Decoder  GetDecoder();
}

這個接口中包含一個Extension屬性,這個屬性返回支持的擴展名。
另一個方法返回一個解碼器的對象(這里我假設了一個Decoder的類,這個類提供把文件流解碼的功能,擴展插件可以派生之),通過解碼器對象我就可以解釋文件流。

那么我規(guī)定所有的解碼插件都必須派生一個解碼器,并且實現(xiàn)這個接口,在GetDecoder方法中返回解碼器對象,并且將其類型的名稱配置到我的配置文件里面。

這樣的話,我就不需要在開發(fā)播放器的時侯知道將來擴展的格式的類型,只需要從配置文件中獲取現(xiàn)在所有解碼器的類型名稱,而動態(tài)的創(chuàng)建媒體格式的對象,將其轉換為IMediaFormat接口來使用。

這就是一個反射的典型應用。

1. 反射的用途

反射的作用:

  • 它允許在運行時查看屬性(attribute&#文章來源地址http://www.zghlxwxcb.cn/news/detail-470970.html

到了這里,關于C# 反射機制詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Java中的Reflection(反射)、暴力反射

    Java中的Reflection(反射)、暴力反射

    1.1 反射的出現(xiàn)背景 Java程序中,所有的對象都有兩種類型: 編譯時類型 和 運行時類型 ,而很多時候對象的編譯時類型和運行時類型 不一致 。 例如: 如上 :某些變量或形參的聲明類型是 Object 類型,但是程序卻需要調用該對象運行時類型的方法,該方法不是Object中的方法

    2024年02月04日
    瀏覽(24)
  • C#的反射機制

    當談到C#的反射機制時,它提供了一種 動態(tài) 地在運行時獲取和操作類型信息的能力。通過反射,可以 在編譯時未知的情況下 ,使用類型信息來創(chuàng)建對象、調用方法、訪問屬性和字段等。下面是一些反射機制的重要概念和用法: Type 類型:Type 類型表示在代碼中定義的類型(

    2024年02月10日
    瀏覽(39)
  • .net反射(Reflection)

    .net反射(Reflection)

    .NET 反射(Reflection)是指在運行時動態(tài)地檢查、訪問和修改程序集中的類型、成員和對象的能力。通過反射,你可以在運行時獲取類型的信息、調用方法、訪問字段和屬性,以及創(chuàng)建對象實例,而無需在編譯時知道這些類型的具體信息。 換句話說,反射可以在類的內(nèi)部成員不

    2024年04月25日
    瀏覽(22)
  • 【C#】反射機制,動態(tài)加載類文件

    【C#】反射機制,動態(tài)加載類文件

    【C#】編號生成器(定義單號規(guī)則、固定字符、流水號、業(yè)務單號) 本文鏈接:https://blog.csdn.net/youcheng_ge/article/details/129129787 【C#】日期范圍生成器(開始日期、結束日期) 本文鏈接:https://blog.csdn.net/youcheng_ge/article/details/129040663 【C#】組件化開發(fā),調用dll組件方法 本文鏈接

    2024年02月11日
    瀏覽(17)
  • 關于C#反射概念,附帶案例!

    C#中的反射是一種使程序在運行時能夠動態(tài)地獲取類型信息并調用其成員的技術。通過反射,程序可以在運行時進行類型的動態(tài)加載、創(chuàng)建對象、調用方法和屬性,以及訪問和修改字段等。反射可以使程序更加靈活,但也增加了一定的性能開銷。 在C#中,反射主要是通過Syst

    2024年02月05日
    瀏覽(17)
  • Reflection java反射源碼分析

    Java的反射(reflection)機制是指在程序的運行狀態(tài)中,可以構造任意一個類的對象,可以了解任意一個對象所屬的類,可以了解任意一個類的成員變量和方法,可以調用任意一個對象的屬性和方法。這種 動態(tài)獲取程序信息 以及 動態(tài)調用對象的功能 稱為Java語言的反射機制。反

    2024年02月02日
    瀏覽(19)
  • [Unity/URP學習]反射探針(Reflection Probe)

    [Unity/URP學習]反射探針(Reflection Probe)

    傳統(tǒng)上,游戲使用一種稱為_反射貼圖_的技術來模擬來自對象的反射,同時將處理開銷保持在可接受的水平。此技術假定場景中的所有反射對象都可以“看到”(因此會反射)完全相同的周圍環(huán)境。如果游戲的主角(比如閃亮的汽車)處于開放空間中,此技術將非常有效,但

    2023年04月09日
    瀏覽(29)
  • 什么是反射機制

    1.什么是類對象: 所有的類,都存在一個類對象,這個類對象用于提供類本身的信息,比如有幾種構造方法, 有多少屬性,有哪些普通方法。 比方有一個Hero類:類對象就是用于描述這種類,都有什么屬性,什么方法的。 獲取類對象有3種方式 Class.forName Hero.class new Hero().get

    2024年02月05日
    瀏覽(26)
  • Java反射機制是什么?

    Java反射機制是什么?

    Java 反射機制 是 Java 語言的一個重要特性。 在學習 Java 反射機制前,大家應該先了解兩個概念,編譯期和運行期。 編譯期 是指把源碼交給編譯器編譯成計算機可以執(zhí)行的文件的過程。在 Java 中也就是把 Java 代碼編成 class 文件的過程。編譯期只是做了一些翻譯功能,并沒有把

    2024年02月12日
    瀏覽(11)
  • 什么是Java中的反射機制?

    Java中的反射機制是一種能夠在運行時動態(tài)地獲取類的信息并操作類或對象的能力。Java中的每個對象都有一個getClass()方法,該方法可以返回該對象所屬的類的Class對象。反射機制通過這個Class對象可以獲取類的屬性、方法、構造函數(shù)等信息,然后可以在運行時動態(tài)地創(chuàng)建對象、

    2024年02月02日
    瀏覽(16)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包