C自学——特性(Attribute)

C自学——特性(Attribute)特性相当于是一个标签,是没有实际意义的,想要起作用需要使用其他的东西解读。

大家好,欢迎来到IT知识分享网。

特性相当于是一个标签,是没有实际意义的,想要起作用需要使用其他的东西解读。比如一栋普通的房子,房子里面有卧室、厨房、游戏房,这些房间都是一样的,只是贴上了一个标签叫卧室、厨房、游戏房等,但这些标签没有实际意义,在游戏房做饭这也是没问题的,这些标签主要看人怎么解读,下面看例子

特性示例

// 特性的命名需要在后面加一个Attribute,然后继承Attribute,Attribute只是一个普通的类 class AnimalAttribute:Attribute { public string Name { get; set; } public AnimalAttribute() { } public AnimalAttribute(string name) { Name = name; } } // 这是一个普通的 Dog类 class Dog { // 特性的调用方式就是 [特性的名称,Attribute可以省略不写] // 现在已经给 Name、Age 属性加上了一个 Animal 特性(标签),但是没有实际意义 [Animal("姓名")] public string Name { get; set; } [Animal("年龄")] public int Age { get; set; } } class Print { static void Main() { // 给 dog 赋值 Dog dog = new Dog(); dog.Name = "Tom"; dog.Age = 18; // 现在开始解读标签 Type t = dog.GetType(); // 获取 dog 的类型 // 获取所有的属性,这里有两个属性 Name,Age foreach (PropertyInfo prop in t.GetProperties()) { string name = prop.Name; // 获取属性的名称,即 Name,Age object value = prop.GetValue(dog); // 获得属性的值,需要指定对象 string animalName; // 与下面是一样的效果 // 获得所有属性的特性,GetCustomAttributes 返回的是 object 数组 object[] animalAttribute = prop.GetCustomAttributes(typeof(AnimalAttribute),false); // 如果数组大于 0,说明有数组是使用了特性的 if(animalAttribute.Length <= 0) { animalName = null; } else { // 将object 转换成 特性,可能存在多个特性,取第一个就行 AnimalAttribute attribute = (AnimalAttribute)animalAttribute[0]; // 将特性的属性取出来 animalName = attribute.Name; } Console.WriteLine(#34;{name}({animalName})={value}"); // 与上面是一样的效果,随便用一种就行 // 直接取出指定的一个特性,返回值是 object,需要进行 显示转换 AnimalAttribute animal = (AnimalAttribute)prop.GetCustomAttribute(typeof(AnimalAttribute)); if (animal == null) { animalName = null; } else { animalName = animal.Name+"1"; } Console.WriteLine(#34;{name}({animalName})={value}"); } } }

输出:

Name(姓名)=Tom // 给属性贴上了一个标签 输出的时候可以不输出Name,可以变成 姓名=Tom Name(姓名1)=Tom Age(年龄)=18 Age(年龄1)=18

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/88690.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信