列表D是個更簡單的屬性——“Hide”屬性。這個屬性不需要構造函數(使用默認的構建函數),也不儲存數據。因為這個屬性只是一個簡單的標志類型的屬性。
列表 D
Class Hide : System.Attribute
{
//This is a simple attribute, that only requires
// the default constructor.
}
從代碼中讀取屬性
讀取屬性並檢查其中的數據比使用屬性或創建屬性顯著地更加復雜。讀取屬性要求開發人員要對如何使用一個對象的反射信息有個基本了解。如果你不熟悉反射機制,可以閱讀“應用反射”系列文章。
假設我們正在查看一個類,我們想知道該類的那個propertIEs使用了Alias屬性以及都有哪些別名。列表E實現了這個功能。
列表 E
Private Dictionary<string, string> GetAliasListing(Type destinationType)
{
//Get all the propertIEs that are in the
// destination type.
PropertyInfo[] destinationProperties = destinationType.GetPropertIEs();
Dictionary<string, string> aliases = newDictionary<string, string>();
for each (PropertyInfo property in destinationPropertIEs)
{
//Get the alias attributes.
object[] aliasAttributes =
property. GetCustomAttributes( typeof(Alias), true);
//Loop through the alias attributes and
// add them to the dictionary.
foreach (object attribute in aliasAttributes)
foreach (string name in ((Alias)attribute).Names)
aliases.Add(name, property.Name);
//We also need to add the property name
// as an alias.
aliases.Add(property.Name, property.Name);
}
return aliases;
}
這段代碼最重要的地方是對GetCustomAttributes的調用以及循環遍歷屬性提取別名的地方。