.Net 5 C# 反射(Reflection)

 

 

什麼是反射

官方定義:微信

反射提供描述程序集、模塊和類型的對象(Type 類型)。 能夠使用反射動態地建立類型的實例,將類型綁定到現有對象,或從現有對象中獲取類型,而後調用其方法或訪問器字段和屬性。 若是代碼中使用了特性,能夠利用反射來訪問它們。dom

我的理解:函數

當咱們須要獲取一個程序集或者一個類的全部屬性(名稱、類型等)、方法(名稱、類型等)等信息時,咱們就須要反射。網站

反射就像一個朦朧的鏡子,抽象折射一個程序集或者一個類的全部信息。
反射就像一個朦朧的鏡子,抽象折射一個程序集或者一個類的全部信息。
反射就像一個朦朧的鏡子,抽象折射一個程序集或者一個類的全部信息。
重複3次,但願你能咀嚼spa

有什麼用?怎麼用?

好比咱們定義一個int類型的i變量,想獲取它的類型信息,咱們就能夠使用反射.net

獲取類型的類型信息。

// Using GetType to obtain type information:
int i = 42;
Type type = i.GetType();
Console.WriteLine(type);

輸出爲:System.Int32。code

或者你會困惑,我不是已經知道了int類型了嘛?還要反射干哈?orm

這裏只是舉例,那若是是泛型呢?對象

獲取泛型信息

// The following method displays information about a generic
    // type.
    private static void DisplayGenericType(Type t)
    {
        Console.WriteLine("\r\n {0}", t);
        Console.WriteLine(" 是不是泛型? {0}",
            t.IsGenericType);
      
    }

若是是加載的程序集呢?blog

獲取程序集的信息

// Using Reflection to get information of an Assembly:
Assembly info = typeof(int).Assembly;
Console.WriteLine(info);

輸出爲:System.Private.CoreLib, Version=4.0.0.0, Culture=neutral,PublicKeyToken=7cec85d7bea7798e。

從已加載的程序集獲取 Type 對象

當咱們須要獲取程序集內的exe的全名時

// Loads an assembly using its file name.
Assembly a = Assembly.LoadFrom("MyExe.exe");
// Gets the type names from the assembly.
Type[] types2 = a.GetTypes();
foreach (Type t in types2)
{
    Console.WriteLine(t.FullName);
}

查看類的信息

下列示例演示如何列出類的構造函數,在本例中即指 String 類。

//請注意引用反射命名空間
using System;
using System.Reflection;

class ListMembers
{
    public static void Main()
    {
        Type t = typeof(System.String);
        Console.WriteLine("Listing all the public constructors of the {0} type", t);
        //BindingFlags是Reflection空間下的枚舉類型
        // 使用GetConstructors方法獲取Public(公共),Instance(實例)的構造方法
        ConstructorInfo[] ci = t.GetConstructors(BindingFlags.Public | BindingFlags.Instance);
        Console.WriteLine("//Constructors");
        PrintMembers(ci);
    }

    public static void PrintMembers(MemberInfo[] ms)
    {
        foreach (MemberInfo m in ms)
        {
            Console.WriteLine("{0}{1}", " ", m);
        }
        Console.WriteLine();
    }
}

首尾呼應、重複強調、重要事情說三遍

當咱們須要獲取一個程序集或者一個類的全部屬性(名稱、類型等)、方法(名稱、類型等)等信息時,咱們就須要反射。

反射就像一個朦朧的鏡子,抽象折射一個程序集或者一個類的全部信息。
反射就像一個朦朧的鏡子,抽象折射一個程序集或者一個類的全部信息。
反射就像一個朦朧的鏡子,抽象折射一個程序集或者一個類的全部信息。

更詳細的信息參考官方文檔

後記

本人不是大佬,只是道路先行者,在落河後,向後來的人大喊一聲,這裏有坑,不要過來啊!

縱然如此,依舊有人重複着落河,重複着吶喊······

我的博客網站 Blog

文章後續會在公衆號更新,微信搜索 OneByOneDotNet 便可關注。

你的一分鼓勵,個人十分動力,點贊免費,感恩回饋。喜歡就點贊評論吧,雙擊6666~

相關文章
相關標籤/搜索