欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

簡易的反射類庫NMSReflector該怎么理解

簡易的反射類庫NMSReflector該怎么理解,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

我們提供的服務有:成都網(wǎng)站制作、成都網(wǎng)站設計、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、瀘溪ssl等。為1000+企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術(shù)的瀘溪網(wǎng)站制作公司

背景簡介

         以前看過一些代碼,是簡單的讀取SqlReader然后賦值給Model,我不是不贊同這種做法,只是看到大篇幅的賦值操作真的有點浪費時間和精力,尤其是一些老項目居多。我看到的還好,多的也就60多個字段且不用其他ORM,如果涉及到變更的話,那么對維護人員來說可能不僅僅是眼力活甚至還是....體力活。另外就是表格的操作,因為鄙人之前也是寫過類似的項目,列名對應著Model屬性名,一個不差,隱隱覺得它們之間應該聯(lián)系起來,所以想能不能盡可能簡化它的操作?可能是自己做得項目太少,只能想到反射這種方法,但是反射的性能大家也都了解,大量的反射賦值耗時可以慢到你眨幾下眼睛,但這對程序來說我覺得是一場災難。因此結(jié)合反射發(fā)出的方法寫了這個庫,如果能給大家在項目上帶來一些便利我也就知足了。

案例1:

public class Student : INMSReflector { 

public string Name;

public string Description { get; set; }        

public static string StaticField; 

public static string StaticProperty { get; set; }    

}

引用步驟:

  1. Step1 : 引用類庫.   

  2. Step2 : using NMSReflector.  

  3. Step3 : 將你的類實現(xiàn)INMSReflector接口;(當然了,如果你嫌麻煩,可以改一下源碼,在ModelOperator.cs中).  

  4. Step4 : 用Create方法創(chuàng)建緩存. (會掃描搜索入口程序集的所有類)  

由于類庫中對object類型做了擴展,因此對象實例可以調(diào)用擴展方法。

1、EmitSet(string propertyName,object value)  為對象的字段或?qū)傩再x值

2、EmitGet(string propertyName) 獲取對象某字段或者屬性值 

用法:

ModelOperator.Create();   

Student t = new Student();   

//普通字段   

t.Name = "小明";   

t.EmitSet("Name", "小明胸前的紅領巾更加鮮艷了!");   

Console.WriteLine(t.Name);   

Console.WriteLine(t.EmitGet("Name"));   

//普通屬性   

t.EmitSet("Description", "他愛著小剛");   

Console.WriteLine(t.Description);   

Console.WriteLine(t.EmitGet("Description"));   

//靜態(tài)字段   

t.EmitSet("StaticFiled", "是他挨著小剛");   

Console.WriteLine(Student.StaticField);   

Console.WriteLine(t.EmitGet("StaticField"));   

//靜態(tài)屬性   

t.EmitSet("StaticProperty", "剛才打錯了");   

Console.WriteLine(Student.StaticProperty);   

Console.WriteLine(t.EmitGet("StaticProperty"));  

ModelOperator.Create();   
Student t = new Student();   
//普通字段   
t.Name = "小明";   
t.EmitSet("Name", "小明胸前的紅領巾更加鮮艷了!");   
Console.WriteLine(t.Name);   
Console.WriteLine(t.EmitGet("Name"));   
//普通屬性   
t.EmitSet("Description", "他愛著小剛");   
Console.WriteLine(t.Description);   
Console.WriteLine(t.EmitGet("Description"));   
//靜態(tài)字段   
t.EmitSet("StaticFiled", "是他挨著小剛");   
Console.WriteLine(Student.StaticField);   
Console.WriteLine(t.EmitGet("StaticField"));   
//靜態(tài)屬性   
t.EmitSet("StaticProperty", "剛才打錯了");   
Console.WriteLine(Student.StaticProperty);   
Console.WriteLine(t.EmitGet("StaticProperty"));

結(jié)果:

簡易的反射類庫NMSReflector該怎么理解

案例2:

支持Column標簽

public class Student : INMSReflector 

public string Name; 

[Column("Note")] 

public string Description { get; set; } 

public static string StaticField; 

public static string StaticProperty { get; set; } 

}

public class Student : INMSReflector 

{ 

	public string Name; 

	[Column("Note")] 

	public string Description { get; set; } 

	public static string StaticField; 

	public static string StaticProperty { get; set; } 

}

注意:

這里的標簽是來自于System.ComponentModel.DataAnnotations.Schema; 

所以需要using System.ComponentModel.DataAnnotations.Schema;

用法:

無論傳標簽設置的名字還是屬性名,都可以賦值或者獲取值。

ModelOperator.Create(); 

Student t = new Student(); 

t.EmitSet("Note", "設置標簽"); 

Console.WriteLine(t.Description);

Console.WriteLine(t.EmitGet("Note"));

其他:

ModelOperator類提供了更多的操作函數(shù)。

與object的擴展方法有所不同,第一個參數(shù)需要把實例傳進去

//獲取實例t的某字段和屬性的值

object Get<T>(T t, string propertyName)

//設置實例t的某字段和屬性的值

void Set<T>(T t, string propertyName, object value)

//獲取類型T的某字段和屬性的類型

Type GetType<T>(string propertyName)

//獲取類型T的設置方法緩存

Dictionary<string, Action<object, object>> GetSetCache<T>()

//獲取類型T的獲取方法緩存

Dictionary<string, Func<object, object>> GetGetCache<T>()

//獲取類型T的屬性字段類型緩存

Dictionary<string, Type> GetTypeCache<T>()

//獲取類型T的標簽與屬性字段緩存

Dictionary<string, string> GetMapCache<T>()

性能測試:

簡易的反射類庫NMSReflector該怎么理解

關(guān)于簡易的反射類庫NMSReflector該怎么理解問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。

本文名稱:簡易的反射類庫NMSReflector該怎么理解
轉(zhuǎn)載來于:http://aaarwkj.com/article20/gppoco.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供用戶體驗小程序開發(fā)、靜態(tài)網(wǎng)站手機網(wǎng)站建設、商城網(wǎng)站、網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設
日本在线高清不卡免费播放| 国外男女性生活在线视频| 亚乱熟女一区二区三区| 日本国产在线一区二区| 人妻勾引中文字幕在线视频| 一区二区日韩欧美国产| 日本在线不卡二区三区| 国产美女主播在线精品一区| 日韩黄色成人免费片子| 欧美日韩精品视频在线| 中文字幕乱码伊人三级| 欧美αv一区二区三区| 国产精品成人大片在线播放| 午夜精品一区二区三区亚洲| 亚洲高清中文字幕专区| 亚洲欧美国产成人在线| 热久久精品只有这里有| 午夜麻豆影网在线观看| av在线日韩国产精品| 国产一区二区三区精品久| 久久精品人妻麻豆尤物| 亚洲大尺码在线视频香蕉| 日本黄色小网站在线播放| 亚洲精品高清一区二区| 日韩人妻中文字幕亚洲| 欧美精品日韩中文字幕在| 亚洲巨人精品福利导航| 国产欧美日韩国产欧美日| 亚洲国产精品性色av| 国产精品大片久久激情四射| 久久尤物av天堂日日综合| 国产91高清在线观看| 青青草国产自拍在线视频 | 日本三本道成人免费毛片| 国产视频传媒一区二区| 夫妻性生活免费的视频| 亚洲精品视频一区二区| 亚洲精品久久麻豆蜜桃| 日本精品在线小视频| 蜜桃免费观看在线视频| 超碰97国产资源在线|