C#的特性学习草稿
原文发布时间为:2008-11-22 —— 来源于本人的百度文章 [由搬家工具导入]
举个简单的例子:
先定义个特性
从Attribute继承,并标明用法
[AttributeUsage(AttributeTargets.Property|AttributeTargets.Class)]
public class MyAttribute:Attribute
{
}
//应用此特性
[My]
public class Entity
{
private int m_MyProperty ;
[My]
public virtual int MyProperty
{
get { return m_MyProperty; }
set { m_MyProperty = value; }
}
}
//检索此特性(在类上标的特性)
class program
{
static void Main()
{
Attribute attr = Attribute.GetCustomAttribute(typeof(Entity), typeof(MyAttribute),false);
}
}
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
namespace baidu
{
class Class5
{
//[Obsolete("no use forever",true)]
//static void Old() { }
//static void New() { }
//public static void Main()
//{
// Old();
//}
//static void Main()
//{
// Console.WriteLine(typeof(HumanBase).IsSerializable);
// Console.ReadLine();
//}
//static void Main()
//{
// BoardingCheckAttribute boardingCheck = new BoardingCheckAttribute("1", "dsf", 1, 1, "df", "df");
// Console.WriteLine(boardingCheck.Name
// + "'s ID is "
// + boardingCheck.ID
// + ", he/she wants to "
// + boardingCheck.Destination
// + " from "
// + boardingCheck.Departure
// + " by the plane "
// + boardingCheck.FlightNumber
// + ", his/her position is "
// + boardingCheck.PostionNumber
// + ".");
// Console.ReadLine();
//}
//static void Main()
//{
// Attribute attr = Attribute.GetCustomAttribute(typeof(Base), typeof(HelpAtrribute),true);
// if (attr is HelpAtrribute)
// {
// HelpAtrribute help = (HelpAtrribute)attr;
// Console.WriteLine(help.Description);
// }
// Console.ReadLine();
//}
static void Main()
{
Type type = typeof(Class1);
HelpAtrribute helpAttr;
foreach (Attribute attr in type.GetCustomAttributes(true))
{
helpAttr = attr as HelpAtrribute;
if (helpAttr != null)
{
Console.WriteLine("Description of Class1:\n{0}", helpAttr.Description);
}
}
foreach (MethodInfo method in type.GetMethods())
{
foreach (Attribute attr in method.GetCustomAttributes(true))
{
helpAttr = attr as HelpAtrribute;
if (helpAttr != null)
{
Console.WriteLine("Description of {0}:\n{1}", method.Name, helpAttr.Description);
}
}
}
foreach (FieldInfo field in type.GetFields())
{
foreach (Attribute attr in field.GetCustomAttributes(true))
{
helpAttr = attr as HelpAtrribute;
if (helpAttr != null)
{
Console.WriteLine("Description of {0}:\n{1}", field.Name, helpAttr.Description);
}
}
}
Console.ReadLine();
}
[AttributeUsage(AttributeTargets.All, AllowMultiple = false, Inherited = false)]
public class HelpAtrribute : Attribute
{
protected string description;
public HelpAtrribute(string description)
{
this.description = description;
}
public string Description
{
get { return this.description; }
}
protected string version;
public string Version
{
get { return this.version; }
set { this.version = value; }
}
}
[HelpAtrribute("this is a donothing class")]
//[HelpAtrribute("this is a doNothing class")]
public class AnyClass
{
[HelpAtrribute("this is a doNothing class")]
public void AnyMethod()
{
}
}
[HelpAtrribute("BaseClass")]
public class Base
{
}
[HelpAtrribute("DeriveClass")]
public class Derive : Base
{
}
[HelpAtrribute("this is class1")]
public class Class1
{
[HelpAtrribute("this is doNothing Method")]
public void Anymethod()
{
}
[HelpAtrribute("this is an integer")]
public int AnyInt=0;
}
[HelpAtrribute("this is Class2", Version = "2.0")]
public class Class2
{
}
//[AttributeUsage(AttributeTargets.Property | AttributeTargets.Class)]
//public class BoardingCheckAttribute : Attribute
//{
// private string id,name,dep,des;
// private int flightnum, positionum;
// public BoardingCheckAttribute(string id, string name, int flightNumber, int PostionNumber, string departure, string destination)
// {
// this.id = id;
// this.name = name;
// this.flightnum = flightNumber;
// this.positionum = PostionNumber;
// this.dep = departure;
// this.des = destination;
// }
// public string ID
// {
// get { return id; }
// set { id = value; }
// }
// public string Name
// {
// get { return name; }
// set { name = value; }
// }
// public int FlightNumber
// {
// get { return flightnum; }
// set { flightnum = value; }
// }
// public int PostionNumber
// {
// get { return positionum; }
// set { positionum = value; }
// }
// public string Departure
// {
// get { return dep; }
// set { dep = value; }
// }
// public string Destination
// {
// get { return des; }
// set { des = value; }
// }
//}
}
}
C#的特性学习草稿的更多相关文章
- Gradle学习草稿
参考博客:http://www.cnblogs.com/davenkin/p/gradle-learning-1.html Android Plugin DSL Reference http://go ...
- Java8 新特性学习 Lambda表达式 和 Stream 用法案例
Java8 新特性学习 Lambda表达式 和 Stream 用法案例 学习参考文章: https://www.cnblogs.com/coprince/p/8692972.html 1.使用lamb ...
- java8 新特性学习笔记
Java8新特性 学习笔记 1主要内容 Lambda 表达式 函数式接口 方法引用与构造器引用 Stream API 接口中的默认方法与静态方法 新时间日期 API 其他新特性 2 简洁 速度更快 修 ...
- C#特性学习笔记二
实例探讨: 自定义了一个特性类: [AttributeUsage(AttributeTargets.Class|AttributeTargets.Method)] class WahAttribute ...
- ES7/8新特性学习随笔
随着每年EcmaScript都会为js带来一些新特性,带来更多美化的编程体验,今天就走进一下es2016/2017所带来的新特性 ES7新特性 includes() 指数操作符 ES8新特性 asyn ...
- java8新特性学习1
java8增加了不少新特性,下面就一些常见的新特性进行学习... 1.接口中的方法 2.函数式接口 3.Lambda表达式 4.java8内置的四大核心函数式接口 5.方法引用和构造器引用 6.Str ...
- python切片、迭代、生成器、列表生成式等高级特性学习
python高级特性 1行代码能实现的功能,决不写5行代码.请始终牢记,代码越少,开发效率越高. 切片 当我们要取一个list中的前n各元素时,如果前n个少的话,我们还可以一个一个的取,但是若前n个元 ...
- C#的特性学习
转自:https://www.cnblogs.com/rohelm/archive/2012/04/19/2456088.html 特性提供功能强大的方法,用以将元数据或声明信息与代码(程序集.类 ...
- 【Java语言特性学习之一】设计模式
设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...
随机推荐
- Git之删除分支
目录 删除本地分支 删除远程分支 删除本地分支: git branch -d dev [git branch -参数 本地分支名称] 删除远程分支: git push origin --delete ...
- JS内置对象练习(慕课网题目)
效果图: XXXX年XX月X日 星期X--班级总分为:81 格式要求: 1.显示打印的日期. 格式为类似“XXXX年XX月XX日 星期X” 的当前的时间. 2.计算出该班级的平均分(保留整数). 同学 ...
- Android开发中SharedPreferences的使用
在Android开发中,在储存少量的数据时,个人感觉SharedPreferences是最好的选择,SharedPreferences是以键值对的方式进行储存,支持boolean,int,float, ...
- C# 图片打印杂谈
日常开头水一下,看了下上次博客,一年零八天了,啧啧,奢侈. 最近这个工作挺满意的,是我想要的发展方向,后续要做机器学习,现在得先把公司之前堆积的问题解决了. 谈人生到此结束,还是说正题吧.(感觉这标题 ...
- Python Linked List
上周日教导一个科班非技术的朋友学习 Python 编程.他的 Python 水平大概就是看了几篇短的 Python 介绍博客.会流程控制和全局函数编写. 具体教导思路是从自己实现一个链表出发,研究学习 ...
- mysql 中modify和change区别(以及使用modify修改字段名称报错)
使用modify修改字段报错如下: mysql> alter table student modify name sname char(16);ERROR 1064 (42000): You h ...
- C语言常用关键字及运算符操作---关键字
每个知识点4问: 1. 是什么? 2. 什么时间用? 3. 怎么用? 4.为什么这么用? 1. 32个关键字 //(1)sizeof 的用法 //sizeof 是关键字,让编译器帮我们查看内存空间存储 ...
- Python3基础教程(十六)—— 迭代器、生成器、装饰器
在这个实验里我们学习迭代器.生成器.装饰器有关知识. 这几个概念是 Python 中不容易理解透彻的概念,务必把所有的实验代码都完整的输入并理解清楚其中每一行的意思. 迭代器 Python 迭代器(I ...
- python基础一 day4 字典
增加: 结果 删: 结果: 结果: 返回值是一个元组形式的键值 改: 结果: 结果: 代码: info=inpu ...
- Windows Server 2012 R2 with Update (x64) - DVD (Chinese-Simplified)
http://www.msdn.hk/html/2014/1404.html Windows Server 2012 R2 with Update (x64) - DVD (Chinese-Simpl ...