亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#反射調(diào)用dll文件中的方法操作泛型與屬性字段

 更新時間:2022年05月04日 16:16:45   作者:農(nóng)碼一生  
這篇文章介紹了C#反射調(diào)用dll文件中的方法操作泛型與屬性字段,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

一、使用方法

  • 查找DLL文件,

  • 通過Reflection反射類庫里的各種方法來操作dll文件

二、步驟

加載DLL文件

Assembly assembly1 = Assembly.Load("SqlServerDB");//方式一:這個DLL文件要在啟動項目下
string filePath = Environment.CurrentDirectory + "";
Assembly assembly2 = Assembly.LoadFile(filePath + @"\SqlServerDB.dll");//方式二:完整路徑
Assembly assembly3 = Assembly.LoadFrom(filePath + @"\SqlServerDB.dll");//方式三:完整路徑
Assembly assembly4 = Assembly.LoadFrom(@"SqlServerDB.dll");//方式三:完整路徑

獲取指定類型

foreach (var item in assembly4.GetTypes())//查找所有的類型,就是有多少個類
{
    Console.WriteLine(item.Name);
}

獲取構(gòu)造函數(shù)

Type type = assembly4.GetType("SqlServerDB.ReflectionTest");//在ReflectionTest類中調(diào)用
foreach (var ctor in type.GetConstructors(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public))
{
    Console.WriteLine($"構(gòu)造方法:{ctor.Name}");
    foreach (var param in ctor.GetParameters())
    {
        Console.WriteLine($"構(gòu)造方法的參數(shù):{param.ParameterType}");
    }
}
//【3】實例化
//ReflectionTest reflectionTest = new ReflectionTest();//這種實例化是知道具體類型--靜態(tài)

//object objTest = Activator.CreateInstance(type);//動態(tài)實例化--調(diào)用我們的構(gòu)造方法
object objTest1 = Activator.CreateInstance(type, new object[] { "string" });//動態(tài)實例化--調(diào)用我們的有參數(shù)構(gòu)造方法

//調(diào)用私有構(gòu)造函數(shù)
//ReflectionTest reflectionTest = new ReflectionTest();  //普通調(diào)用
object objTest2 = Activator.CreateInstance(type, true);

調(diào)用非構(gòu)造方法

object objTest2 = Activator.CreateInstance(type, true);
//調(diào)用普通方法
ReflectionTest reflectionTest = objTest2 as ReflectionTest;//as轉(zhuǎn)換的好處,它不報錯,類型不對的話就返回null
reflectionTest.Show1();

//調(diào)用私有方法
var method = type.GetMethod("Show2", BindingFlags.Instance | BindingFlags.NonPublic);
method.Invoke(objTest2, new object[] { });

調(diào)用泛型方法

//泛型無參數(shù)
var method3 = type.GetMethod("Show3");//查找指定方法
var genericMethod = method3.MakeGenericMethod(new Type[] { typeof(int) });//指定泛型參數(shù)類型T
genericMethod.Invoke(objTest2, new object[] { });

//泛型有參數(shù)
var method4 = type.GetMethod("Show4");//查找指定方法
var genericMethod4 = method4.MakeGenericMethod(new Type[] { typeof(string) });//指定泛型參數(shù)類型T
genericMethod4.Invoke(objTest2, new object[] { 123, "泛型string參數(shù)" });

反射測試類

位于SqlServerDB.dll中的ReflectionTest.cs文件中

    /// <summary>
    /// 反射測試類
    /// </summary>
   public class ReflectionTest
    {
        //私有構(gòu)造函數(shù)
        private ReflectionTest()
        {
            Console.WriteLine("這是私有無參數(shù)構(gòu)造方法");
        }

        //普通構(gòu)造函數(shù)
        //public ReflectionTest()
        //{
        //    Console.WriteLine("這是無參數(shù)構(gòu)造方法");
        //}

        public ReflectionTest(string name)
        {
            Console.WriteLine($"這是有參數(shù)構(gòu)造方法+參數(shù)值是:{name}");
        }

        public void Show1()
        {
            Console.WriteLine("調(diào)用普通方法", this.GetType());
        }

        private void Show2()
        {
            Console.WriteLine("調(diào)用私有方法",this.GetType());
        }


        public void Show3<T>()
        {
            Console.WriteLine("調(diào)用無參數(shù)泛型方法", this.GetType());
        }

        public void Show4<T>(int id,string name)
        {
            Console.WriteLine($"調(diào)用有參數(shù)泛型方法,參數(shù)是{id},{name}", this.GetType());
        }
    }

操作泛型類和泛型方法

加載DLL文件

Assembly assembly = Assembly.LoadFrom(@"SqlServerDB.dll");

獲取指定類型

Type type = assembly.GetType("SqlServerDB.GenericClass`2").MakeGenericType(typeof(int), typeof(string));//一定給定具體類型參數(shù)

調(diào)用泛型方法

object objTest2 = Activator.CreateInstance(type);
var method = type.GetMethod("GenericMethod").MakeGenericMethod(typeof(int));
method.Invoke(objTest2, new object[] { });

反射測試類

位于SqlServerDB.dll中的GenericClass.cs文件中

public class GenericClass<T,W>
{
    public void GenericMethod<TType>()
    {
        Console.WriteLine("泛型類調(diào)用+泛型方法");
    }
}

操作類屬性字段

加載DLL文件

Assembly assembly2 = Assembly.LoadFrom("SqlServerDB.dll");

獲取指定類型

Type type2 = assembly2.GetType("SqlServerDB.PropertyClass");

調(diào)用泛型方法

object obj = Activator.CreateInstance(type2);
foreach (var property in type2.GetProperties())
{
    Console.WriteLine(property.Name);
    //給屬性設置值
    if (property.Name.Equals("Id"))
    {
        property.SetValue(obj, 1);
    }
    else if (property.Name.Equals("Name"))
    {
        property.SetValue(obj, "學習編程");
    }
    else if (property.Name.Equals("Phone"))
    {
        property.SetValue(obj, "123459789");
    }
    //獲取屬性值
    Console.WriteLine(property.GetValue(obj));
}

反射測試類

位于SqlServerDB.dll中的PropertyClass.cs文件中

public class PropertyClass
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Phone { get; set; }
}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C# Winform實現(xiàn)導入和導出Excel文件

    C# Winform實現(xiàn)導入和導出Excel文件

    這篇文章主要為大家詳細介紹了C# Winform實現(xiàn)導入和導出Excel文件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Entity Framework主從表數(shù)據(jù)加載方式

    Entity Framework主從表數(shù)據(jù)加載方式

    這篇文章介紹了Entity Framework主從表數(shù)據(jù)加載方式,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • c# 將Datatable數(shù)據(jù)導出到Excel表格中

    c# 將Datatable數(shù)據(jù)導出到Excel表格中

    本文主要介紹了c# 將Datatable數(shù)據(jù)導出到Excel表格中的方法。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • C#讀取視頻的寬度和高度等信息的方法

    C#讀取視頻的寬度和高度等信息的方法

    這篇文章主要介紹了C#讀取視頻的寬度和高度等信息的方法,通過執(zhí)行一條CMD命令來實現(xiàn)讀取視頻寬度和高度的功能,具有不錯的實用價值,需要的朋友可以參考下
    2014-11-11
  • C#使用XML序列化操作菜單的方法

    C#使用XML序列化操作菜單的方法

    這篇文章主要介紹了C#使用XML序列化操作菜單的方法,是基于上一篇遞歸讀取XML菜單數(shù)據(jù)的改進方法,具有一定的參考借鑒價值,需要的朋友可以參考下
    2014-12-12
  • C# 制作PictureBox圓形頭像框并從數(shù)據(jù)庫中讀取頭像

    C# 制作PictureBox圓形頭像框并從數(shù)據(jù)庫中讀取頭像

    C#提供的PictureBox控鍵默認情況下是方形的非常大的影響美觀,怎么解決這一問題呢?下面小編給大家?guī)砹薈# 制作PictureBox圓形頭像框并從數(shù)據(jù)庫中讀取頭像的操作代碼,感興趣的朋友一起學習下吧
    2021-08-08
  • C# 枚舉類型的聲明和使用

    C# 枚舉類型的聲明和使用

    如果一種變量只有幾種可能的值,可以定義為枚舉類型。所謂“枚舉類型”是將變量的值一一列舉出來,變量的值只能在列舉出來的值的范圍內(nèi)
    2021-07-07
  • C#面向?qū)ο缶幊袒A概念匯總

    C#面向?qū)ο缶幊袒A概念匯總

    今天小編就為大家分享一篇關(guān)于C#面向?qū)ο缶幊袒A概念匯總的文章,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • 基于WPF編寫有趣的久坐提醒桌面小程序

    基于WPF編寫有趣的久坐提醒桌面小程序

    這篇文章主要為大家詳細介紹了如何基于WPF編寫一個有趣的久坐提醒桌面小程序,文中的示例代碼講解詳細,感興趣的小伙伴可以動手嘗試一下
    2023-08-08
  • C#利用ReportViewer生成報表

    C#利用ReportViewer生成報表

    這篇文章主要為大家詳細介紹了C#利用ReportViewer生成報表的相關(guān)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05

最新評論