C#反射機制來獲取類 屬性的描述
自定義特性(Custom Attributes)
namespace Demo_One
{[Serializable]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = false)]
[ComVisible(true)]
public class RecordAttribute:Attribute
{
private string recordType; // 記錄型別:更新/建立
private string author; // 作者
private DateTime date; // 更新/建立 日期
private string memo; // 備註
// 建構函式,建構函式的引數在特性中也稱為“位置引數”。
public RecordAttribute(string recordType, string author, string date)
{
this.recordType = recordType;
this.author = author;
this.date = Convert.ToDateTime(date);
}
// 對於位置引數,通常只提供get訪問器
public string RecordType { get { return recordType; } }
public string Author { get { return author; } }
public DateTime Date { get { return date; } }
// 構建一個屬性,在特性中也叫“命名引數”
public string Memo
{
get { return memo; }
set { memo = value; }
}
}
我們發現在這個特性的定義上,又用了三個特性去描述它。這三個特性分別是:Serializable、AttributeUsage 和 ComVisible。Serializable特性我們前面已經講述過,ComVisible簡單來說是“控制程式集中個別託管型別、成員或所有型別對 COM 的可訪問性”(微軟給的定義)。這裡我們應該注意到:特性本身就是用來描述資料的元資料,而這三個特性又用來描述特性,所以它們可以認為是“元資料的元資料”(元元資料:meta-metadata)。
AllowMutiple 屬性用於設定該特性是不是可以重複地新增到一個型別上(預設為false),
Inherited
就更復雜一些了,假如有一個類繼承自我們的DemoClass,那麼當我們將RecordAttribute新增到DemoClass上時,DemoClass的子類也會獲得該特性。而當特性應用於一個方法,如果繼承自該類的子類將這個方法覆蓋,那麼Inherited則用於說明是否子類方法是否繼承這個特性。
namespace Demo_One
{
[Record("ITone", "ITone", "2018-8-8")]
[Record("ITone", "ITone", "2018-8-8",Memo ="測試儀")]
[Record("ITone", "ITone", "2018-8-8")]
public class TestClass
{
[Description("中文名字")]
public string Name { get; set; }
[Description("描述使用者的ID")]
public string UserID { get; set; }
[Obsolete("請使用新的方法 ")]
public void SendMsg()
{
Console.Write("xxxxx");
}
public void SendMsg(string ms)
{
Console.Write("x1222xxxx");
}
}
}
class Program
{
static void Main(string[] args)
{
Type t = typeof(TestClass);
Object[] records = t.GetCustomAttributes(typeof(RecordAttribute), false);
foreach (RecordAttribute record in records)
{
Console.WriteLine(" 型別:{0}", record.RecordType);
Console.WriteLine(" 作者:{0}", record.Author);
Console.WriteLine(" 日期:{0}", record.Date.ToShortDateString());
if (!String.IsNullOrEmpty(record.Memo))
{
Console.WriteLine(" 備註:{0}", record.Memo);
}
}
//獲取這個物件的所有公共屬性
PropertyInfo[] zh = t.GetProperties();
foreach (var item in zh)
{
//獲取屬性的描述
Object[] obs= item.GetCustomAttributes(typeof(DescriptionAttribute),false);
foreach (DescriptionAttribute record in obs)
{
Console.WriteLine(" 型別:{0}", record.Description);
}
}
//通過反射來建立一個實體
TestClass ass = (TestClass)Assembly.GetExecutingAssembly().CreateInstance("Demo_One.TestClass");
ass.SendMsg("");
}
}
相關推薦
C#反射機制來獲取類 屬性的描述
自定義特性(Custom Attributes) namespace Demo_One { [Serializable] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method
利用反射機制,獲取類的欄位、方法、並實現簡單呼叫
這篇文章是為之後要介紹Android的ICO框架做預備的,所以,如果想最近學習Android的ICO框架的同學,可以稍微看一下。 首先,簡單介紹一下Java裡面的反射。 JAVA反射機制是在執行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個物件
通過java反射機制,獲取物件的屬性和值(包括所有繼承的父類)
java的反射機制提供了兩種方法: getDeclaredFields() :該方法能獲取到本類的所有屬性,包括private,protected和public,但不能獲取到繼承的父類的屬性。 getFields():既能獲取本類的屬性也能得到父類的
JAVA的newInstance()和new的區別(JAVA反射機制,通過類名來獲取該類的例項化物件)
newInstance()是實現IOC、反射、面對介面程式設計 和 依賴倒置 等技術方法的必然選擇,new 只能實現具體類的例項化,不適合於介面程式設計。 裡面就是通過這個類的預設建構函式構建了一個物件,如果沒有預設建構函式就丟擲InstantiationException, 如果沒有訪問預設建構函式的許可權
通過java反射機制,獲取對象的屬性和值(包括所有繼承的父類)
原創 getc getname 因此 declared protect 版權 str 來源 java的反射機制提供了兩種方法: getDeclaredFields() :該方法能獲取到本類的所有屬性,包括private,protected和public,但不能獲取到
C#獲取類屬性
bsp inf info string nbsp obj list getprop null C#獲取類屬性 Type t = fxsinfo.GetType(); PropertyInfo[] PropertyList = t.GetProper
C#反射機制 Type型別的獲取方式
有三種方式獲取Type型別 程式碼如下: using System; using System.Collections.Generic; using System.Linq; using System.
C#反射遍歷/查詢類中的屬性以及值
CSDN廣告是越來越多了,所有部落格筆記不再更新,新網址 DotNet筆記 遍歷一個類/或類物件的屬性/值,很有用,看個例子 using System; using System.Collections.Generic; using System.Linq; u
c++ 反射機制: 用類名作變數,動態建立物件
什麼是反射 從建立物件的角度上來看,狹義的說,比如有個 class A ,你能直接 new A() 來建立 物件。但是如果想根據字串 “A” 來建立 class A 的物件,比如 使用 new “A” 的形式來建立 物件,甚至 “A” 是個變數。 str =
跟著辛星用PHP的反射機制來實現插件
red 實現 track 這一 列表 each 方法 fun 繼承 我的博文的前一篇解說了PHP的反射機制是怎麽回事,假設讀者還不清楚反射機制,能夠搜索下或者看我的博文,都是不錯的選擇。我們開始解說一下怎麽用PHP來實現插件機制。所謂插件機制。就是我們定義
Android小例子:使用反射機制來讀取圖片制作一個圖片瀏覽器
onclick lac protected blank pri tar lec 存儲 current 效果圖: 工程文件夾: 該例子可供於新手參考練習,如果有哪裏不對的地方,望指正>-< 《
Java反射機制能夠獲取的信息,與應用
rri 代理 pan [] reflect 語言 子類 list tro 一、什麽是Java反射機制? 【1】反射機制是在運行狀態中,對於任何一個類,都能夠知道這個類的所有屬性和方法; 【2】對於任意一個對象,都能夠調用它的任意一個屬性和方法; 像這種動態獲取類的信
C++反射機制:可變參數模板實現C++反射
https dcm ESS 容易出錯 指定 ring 人員 時間處理 emp 1. 概要 本文描述一個通過C++可變參數模板實現C++反射機制的方法。該方法非常實用,在Nebula高性能網絡框架中大量應用,實現了非常強大的動態加載動態創建功能。Neb
C++反射機制:可變參數OA信用盤平臺搭建模板實現C++反射
github () 簡單的 同學 多重繼承 是什麽 定義 通用 插件 概要OA信用盤平臺搭建Q1446595067 ??本文描述一個通過C++可變參數模板實現C++反射機制的方法。該方法非常實用,在Nebula高性能網絡框架中大量應用,實現了非常強大的動態加載動態創建功能。
c# 反射機制的基本瞭解
1.反射機制的簡單介紹 反射機
Python中如何獲取類屬性的列表
前言 最近工作中遇到個需求是要得到一個類的靜態屬性,也就是說有個類 Type ,我要動態獲取 Type.FTE 這個屬性的值。 最簡單的方案有兩個: ? 1 2 getattr(Type, 'FTE') Type.__dic
反射機制與Class類
從這節課開始, 我們正式進入java 反射機制的學習 首先,什麼是java的反射機制?來看百度百科: 重點: 在執行狀態中 對任意一個實體類 對任意一個物件 動態獲取資訊 動態呼叫物件方法 &
java反射機制和Class類
面向物件思想 一切皆物件 類也是物件,Class類的物件,java.lang.Class Class類的構造器是私有的,只有虛擬機器可以直接建立它的物件, 有三種建立方式:類.class、類物件.getClass、Class.forName 靜態載入:new,發生在編譯的時候 動態載
python 學習彙總63:獲取類屬性的列表(初級學習- tcy)
獲取類屬性的列表 2018/11/20 ====================================================================== 1.類屬性: getattr(Type, 'FTE'); type.__dict__['FTE'] ===
利用反射機制建立工具類對資料進行加密和解密
對資料庫的資料進行加密,包括使用者資料、專案資料、聊天資料等,需要在插入表的的時候進行加密,查詢的時候進行解密。利用java的反射機制,建立以下工具類,對資料進行加解密。 public class CryptoUtil { /** * 加密、解密方法 * @param ob