博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
特性(Attribute)的用处
阅读量:6002 次
发布时间:2019-06-20

本文共 2327 字,大约阅读时间需要 7 分钟。

Attribute特性,可以往程序集中写入一些元数据。微软类库中自带很多 Attribute类,某些时候,需要对类标注一下 Attribute。那么自定义 Attribute的用处是什么的,或者说,什么时候我们需要自定义 Attribute。

在我看来, 自定义Attribute没啥用。常规的项目开发中,我都可以用变通的方式去实现。当然硬是要为了用而用也可以,就是写一些信息到程序集中,然后在调用的时候在读取这些信息。采用反射的技术,但这不是多此一举影响性能么,直接把信息传给类不更好吗?
所以不清楚何时何地必须要Attribute。下面的例子,就是,用到反射读取Attribute的信息。
 
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
System.Dynamic
;
namespace ConsoleApplication1
{
   
class Program
   
{
       
// create custom attribute to be assigned to class members
       
[AttributeUsage
(AttributeTargets
.
Class
|
        AttributeTargets
.
Constructor
|
        AttributeTargets
.
Field
|
        AttributeTargets
.
Method
|
        AttributeTargets
.
Property,
        AllowMultiple
=
true
)
]
       
public
class BugFixAttribute
:
System
.
Attribute
       
{
           
// attribute constructor for positional parameters
           
public BugFixAttribute
           
(
           
int bugID,
           
string programmer,
           
string date
           
)
           
{
               
this
.
BugID
= bugID
;
               
this
.
Programmer
= programmer
;
               
this
.
Date
= date
;
           
}
           
// accessors
           
public
int BugID
{
get
;
private set
;
}
           
public
string Date
{
get
;
private set
;
}
           
public
string Programmer
{
get
;
private set
;
}
           
// property for named parameter
           
public
string Comment
{
get
; set
;
}
       
}
       
// ********* assign the attributes to the class ********
       
[BugFixAttribute
(
121,
"Jesse Liberty",
"01/03/08"
)
]
       
[BugFixAttribute
(
107,
"Jesse Liberty",
"01/04/08",
        Comment
=
"Fixed off by one errors"
)
]
       
public
class MyMath
       
{
           
public
double DoFunc1
(
double param1
)
           
{
               
return param1
+ DoFunc2
(param1
)
;
           
}
           
public
double DoFunc2
(
double param1
)
           
{
               
return param1
/
3
;
           
}
       
}
       
public
class Tester
       
{
           
static
void Main
(
string
[
] args
)
           
{
                MyMath mm
= MyMath
(
)
;
                Console
.
WriteLine
(
"Calling DoFunc(7). Result: {0}",
                mm
.
DoFunc1
(
7
)
)
;
               
// get the member information and use it to
               
// retrieve the custom attributes
               
System.Reflection
.
MemberInfo inf
=
(MyMath
)
;
               
object
[
] attributes
;
                attributes
= inf
.
GetCustomAttributes
(
               
(BugFixAttribute
),
false
)
;
               
// iterate through the attributes, retrieving the
               
// properties
               
foreach
(
Object attribute
in attributes
)
               
{
                    BugFixAttribute bfa
=
(BugFixAttribute
)attribute
;
                    Console
.
WriteLine
(
"\nBugID: {0}", bfa
.
BugID
)
;
                    Console
.
WriteLine
(
"Programmer: {0}", bfa
.
Programmer
)
;
                    Console
.
WriteLine
(
"Date: {0}", bfa
.
Date
)
;
                    Console
.
WriteLine
(
"Comment: {0}", bfa
.
Comment
)
;
               
}
           
}
       
}
   
}
}

转载地址:http://pcbmx.baihongyu.com/

你可能感兴趣的文章
非结构化数据与结构化数据提取---多线程爬虫案例
查看>>
splay版
查看>>
unity 打包编译记录
查看>>
CSS知识总结(四)
查看>>
软件工程第一次作业
查看>>
22. Generate Parentheses
查看>>
MDL相关总结
查看>>
11.表达式语言
查看>>
3.数据校验和SpringEL
查看>>
面向对象编程-何为对象
查看>>
L2TP/IPSec一键安装脚本
查看>>
android以json形式提交信息到服务器
查看>>
CetnOS 6.7安装Hive 1.2.1
查看>>
最短最优升级路径(完美世界2017秋招真题)
查看>>
【PHP基础】错误处理、异常处理
查看>>
Android之drawable state各个属性详解
查看>>
Linux——网段的划分,子网掩码,ABC类地址的表示法
查看>>
android开发(22)使用正则表达式 。从一个字符串中找出数字,多次匹配。
查看>>
AJAX
查看>>
2015 多校联赛 ——HDU5334(构造)
查看>>