歡迎來到《小5講堂》
這是《C#》系列文章,每篇文章將以博主理解的角度展開講解。
溫馨提示:博主能力有限,理解水平有限,若有不對之處望指正!
背景
找不到屬性集方法。get只讀屬性用了反射設置setValue肯定報錯
報錯分析
實體類成員,進行反射時,只讀成員是無法進行設置值的。
下面圖中,update_time設置了get只讀,只能獲取值,無法設置值,因此在進行反射設置值時就報錯了。
get和set
在C#中,get 和 set 是用于定義屬性(properties)的關鍵字。
1.get
用于獲取屬性的值。當代碼嘗試訪問屬性的值時,會調用 get 方法來返回該值。
2.set
用于設置屬性的值。當代碼嘗試給屬性賦值時,會調用 set 方法來存儲該值。
通過使用屬性,可以控制對類的字段(fields)的訪問,使其更加安全和可控。例如,可以在 set 方法中添加驗證邏輯,以確保屬性值符合特定的條件。
下面是一個簡單的示例,展示了如何在C#中使用 get 和 set:
public class Person
{private string name;// 定義屬性 Name,具有 get 和 set 方法public string Name{get{return name; // 獲取屬性值}set{if (!string.IsNullOrEmpty(value)) // 設置屬性值前進行驗證{name = value; // 設置屬性值}else{throw new ArgumentException("Name cannot be null or empty");}}}
}
在上面的示例中,Name 屬性具有 get 和 set 方法。當調用 person.Name 時,會調用 get 方法來獲取屬性值;當調用 person.Name = “John” 時,會調用 set 方法來設置屬性值為 “John”。
反射用法
在C#中,反射(Reflection)是一種強大的技術,允許在運行時獲取類型的信息,并動態操作它們的成員(如屬性、方法、字段等)。使用反射,可以在不知道具體類型的情況下,仍能夠調用類型的成員、創建對象或修改對象的行為。主要的反射類都位于 System.Reflection 命名空間中。
以下是一些反射技術常見的用途和功能:
1.獲取類型信息
可以通過反射獲取類型的名稱、命名空間、方法、屬性、字段等詳細信息。例如,使用 typeof 操作符或 GetType() 方法來獲取類型的 Type 對象。
2.動態創建對象
可以使用反射來動態創建類的實例。通過 Activator.CreateInstance 方法或者 Type 類的 GetConstructor 方法結合 Invoke 方法,可以在運行時創建對象。
3.調用成員
可以使用反射來調用類的方法、獲取和設置屬性的值,以及訪問和修改字段。這些操作可以通過 GetMethod、Invoke、GetProperty、SetValue 等方法來完成。
4.獲取和設置字段值
可以通過反射讀取和修改類的字段值,即使字段是私有的也可以。
5.查找和調用特定類型的方法
可以根據方法的名稱、參數類型等信息,通過反射動態調用特定的方法。
6.檢查和應用屬性和特性
可以通過反射讀取類、方法或屬性上的自定義特性(Attributes),并根據特性中的元數據來調整程序行為。
反射技術通常用于編寫框架、插件系統、ORM(對象關系映射)庫等需要動態處理和操作類型的場景。然而,由于反射操作相比靜態調用會有一定的性能損耗,因此在對性能要求較高的場景中需要謹慎使用。
相關文章
【C#】pdf按頁分割文件,以及分頁合并,效果還不錯,你值得擁有
【C#】未能加載文件或程序集“CefSharp.Core.Runtime.dll”或它的某一個依賴項。找不到指定的模塊。
【C#】.net core 6.0 在program時間格式統一json格式化,并列舉program默認寫法和簡化寫法
【C#】.net core 6.0 ApiController,API控制器方法,API接口以實體類作為接收參數應該注意的點
【C#】 SortedDictionary,查找字典中是否存在給定的關鍵字
【C#】.net core 6.0 MVC返回JsonResult顯示API接口返回值不可被JSON反序列化
【C#】.net core 6.0 使用第三方日志插件Log4net,配置文件詳細說明
【C#】使用代碼實現龍年春晚撲克牌魔術(守歲共此時),代碼實現篇
【C#】使用代碼實現龍年春晚撲克牌魔術(守歲共此時),流程描述篇
【C#】約瑟夫原理舉例2個代碼實現
【C#】List泛型數據集如何循環移動,最后一位移動到第一位,以此類推
【C#】獲取文本中的鏈接,通過正則表達式的方法獲取以及優化兼容多種格式
溫故而知新,不同階段重溫知識點,會有不一樣的認識和理解,博主將鞏固一遍知識點,并以實踐方式和大家分享,若能有所幫助和收獲,這將是博主最大的創作動力和榮幸。也期待認識更多優秀新老博主。