c#中類成員變數的定義分為兩種:域(field)與屬性(property),屬性為公有變數,以get,set訪問器進行訪問,域多為私有變數,非get、set訪問器進行訪問,如以下類的的域為成員name,而屬性為val.
class customer
#endregion
};
當我們獲得乙個類物件時,我們就可以通過反射機制來獲取該類的成員及內容:
customer obj = new customer();
obj.name = "123456";
obj.val = 3;
type objtype = obj.gettype();
propertyinfo l = objtype.getproperties();
foreach (var item in l) :",item.name,item.getvalue(obj,null));
}fieldinfo fields = objtype.getfields();
foreach (var item in fields) :", item.name, item.getvalue(obj));
}
我們也可以建立該類的物件:
//customer cs = (customer)program.getobj(obj);
static object getobj(object obj)
:", item.name, item.getvalue(obj, null));
item.setvalue(instance, item.getvalue(obj, null), null);
}fieldinfo fields = objtype.getfields();
foreach (var item in fields)
:", item.name, item.getvalue(obj));
item.setvalue(instance, item.getvalue(obj));
}return instance;
}
利用這些反射特性就可以在執行中生成新的物件或構造屬性attribute驗證器了。如果我們將類寫成如下格式:
[attributeusage(attributetargets.field)]
class check : attribute
};class customer
#endregion
};
通過check來驗證欄位的合法性,利用反射來進行統一驗證:
fieldinfo fields = objtype.getfields();
foreach(var item in fields) ,max length:", item.name, c.maxlength);
}}
最後乙個類的驗證工作就可以這樣方便的實現了。 C 中的變數 字段 域 屬性 屬性過程
在c 中 域 表示與物件或類相關聯的變數,修飾符不論是不是public。與字段類似 字段 表示與物件或類相關聯的變數。通常來講修飾符是public的成員變數稱為字段,而private更適合說是區域性變數。與域類似 屬性 表示域或字段的自然擴充套件,使得在保證封裝性的基礎上實現了訪問私有成員的便捷性。...
C 中的域(Field)和屬性(Property)
c 中的域 field 和屬性 property 一般的命名習慣 field 對應的屬性 或許狹義地進行區分一下,get和 set的實現的稱為屬性,其他的變數稱為資料成員。c 將屬性從其他語言中的一種特殊約定提公升成為一種第一等 first class 的語言特性。屬性在使我們可以將資料成員暴露為公...
C中的鏈結屬性及作用域
如果相同的識別符號出現在幾個不同的原始檔中時,它們是表示相同的實體,還是不同的實體。識別符號的鏈結屬性決定如何處理在不同檔案中出現的識別符號。識別符號的作用域與它的鏈結屬性有關。鏈結屬性一般有三種 external 外部,internal 內部,none 無。沒有鏈結屬性的識別符號總是被當作單獨的個...