日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#——lambda表达式和反射

發布時間:2024/3/13 C# 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#——lambda表达式和反射 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Lambda表達式的演化——從這個演化過程我們能夠更進一步理解這個表達式的好處(減少代碼書寫)

為了更好的了解lambda表達式,需要先了解委托,其次是匿名函數——

匿名方法:提供了一種傳遞代碼塊作為委托

參數的技術。匿名方法是沒有名稱只有主體的方法。 在匿名方法中您不需要指定返回類型,它是從方法主體內的 return 語句推斷的。

在主函數中創建如下聲明delegate void ShowMsg();//不帶返回 無參delegate int Add(int x, int y); //創建如下方法——public class DelegateClass{public int AddNew(int a, int b){int c = a + b;return c;}public void ShowMsg(){Console.WriteLine("顯示方法");} }

之后的測試函數

ShowMsg show=delegate(){Console.writeLine("匿名方法");};

這個就是匿名方法——它不直接指定方法體名稱,只有具體的方法在。

于是有以下演化過程——

? //第一種方法,我們可以這么寫 Add add1=delegate(int x ,int y){ int c=x+y; return c; };//第二種方法,如果我們不用delegate呢?于是將delegate變成=> Add add2=(int x,int y)=>{ int c=x+y; return c; };//第三種方法,如果我們不要指定參數類型可不可以? Add add3=(x,y)=>{ int c=x+y; return c; }//第四種,還可不可簡化? Add add4=(x,y)=>x+y;//這個就是Lambda表達式了 //我們還可以這么做 add4+=(x,y)=>(x+y)*x;add4+=(x,y)=>(x-y)*x;//在使用的時候,一般得到的結果是最后一個的結果比如 int result=add4(1,2);//結果為-1,而不是3.?

以上就是簡單的lambda表達式。


反射的內容——

反射是程序可以訪問、檢測和修改它本身狀態或行為的一種能力。通過反射可以在運行時獲取到程序或程序集的每一個類型(類、結構、委托和接口等)

反射常用的方法——

#region 反射//相關命名空間 類 System.Reflection Type Assembly//作用,獲取程序或程序集中每個類型的信息//1、創建對象UserInfo userInfo = new UserInfo();//此為直接創建//2、假如不直接創建呢?Type type = typeof(UserInfo);//獲取類型的Type對象UserInfo user1 = Activator.CreateInstance<UserInfo>();//用來創建對象實例UserInfo user2 = (UserInfo)Activator.CreateInstance(type);//使用默認構造函數創建實例//獲取類成員var properties = type.GetProperties();//所有的公有屬性PropertyInfo proId = type.GetProperty("UserID");var fields = type.GetFields();//獲取公有字段var priFields = type.GetFields(BindingFlags.Instance|BindingFlags.NonPublic);//獲取私有字段,一般不用//獲取方法var publicMethod = type.GetMethods();//獲取所有公共方法//通過反射的方法獲取方法并調用(以下為調用有參方法object user4 = Activator.CreateInstance(type);MethodInfo mShow = type.GetMethod("Show", new Type[] { });mShow.Invoke(user4, null);//參數沒有就傳null//帶參數的方法的調用MethodInfo mShow1 = type.GetMethod("Show", new Type[] {typeof(UserInfo) });mShow1.Invoke(user4, new object[] { userInfo });//靜態方法的獲取,和上例一樣,有參就傳參數,然后調用的時候是實例方法的調用MethodInfo mShowstatic = type.GetMethod("ShowInfo", new Type[] { });mShowstatic.Invoke(null,null);//獲取構造函數var constructor = type.GetConstructors();//所有的公共構造函數ConstructorInfo cons1 = type.GetConstructor(new Type[] { });//無參UserInfo user6 =(UserInfo) cons1.Invoke(null);//調用有參構造函數的方法ConstructorInfo cons2 = type.GetConstructor(new Type[] { typeof(int), typeof(string) });object user7= cons2.Invoke(userInfo, new object[] { 12, "干" });//加載程序集//三種方式——//1、Load() dll/exe 文件名不加后綴,需要將dll文件放到啟動文件的debug下// Assembly assembly = Assembly.Load("Models");//加載程序集//3\、LoadFrom()程序集名稱 帶DLL后綴Assembly assembly = Assembly.LoadFrom("Models.dll");Type typeMenu = assembly.GetType("Models.UserInfo");//類的完整名稱 命名空間+類名//創建對象實例object userInfo1 = Activator.CreateInstance(typeMenu);//寫屬性值typeMenu.GetProperty("UserID").SetValue(userInfo1,5);//讀屬性值foreach(var p in typeMenu.GetProperties()){object objVal = p.GetValue(userInfo1);if (objVal != null){Console.WriteLine(objVal.ToString());}}//2、LoadFile()dll 文件的絕對路徑(一般不用)//讀寫屬性值#endregion

總結

以上是生活随笔為你收集整理的C#——lambda表达式和反射的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。