attributeusagec# Attribute 怎么用

attributeusage  时间:2021-07-05  阅读:()

C#Attribute怎么得到附加此Attribute的方法信息

应该通过反射机制可以获取相应的信息。

1、首先有如下自定义的Attribute [AttributeUsage(AttributeTargets.All)] public sealed class NameAttribute : Attribute { private readonly string _name; public string Name { get { return _name; } } public NameAttribute(string name) { _name = name; } } 2、定义一个使用NameAttribute的类 Name("dept")] public class CustomAttributes { [Name("Deptment Name")] public string Name { get; set; } [Name("Deptment Address")] public string Address; } 3、获取CustomAttributes类上的"dept" private static string GetName() { var type = typeof(CustomAttributes); var attribute = type.GetCustomAttributes(typeof(NameAttribute), false).FirstOrDefault(); if (attribute == null) { return null; } return ((NameAttribute)attribute).Name; }

Attribute和Property的区别

property是指类向外提供的数据区域。

而attribute则是描述对象在编译时或运行时属性的,分为固有型和用户自定义型,其中用户自定义型可以利用Reflection在运行期获取。

这两者是有本质区别的。

资料上说二者一个是service的属性,而另一个是interface的。

第一种好象更准确,摘要如下: 在很多人的脑海中,Attribute就是类的属性,Property呢?好像也是类的属性?因此有很多人不加区别的统一称为类的属性,尤其是在写中文文章的时候。

这种心理是典型的鸵鸟心态,眼不见为净。

其实稍微用脚想一下就知道,事实肯定不是这样的,UML中既然发明了这两个术语,显然不是用来冗余的。

它们之间肯定有着千丝万缕的联系与区别。

各种各样的面向对象语言、各种组件技术、模板技术、Web Service技术,其中大部分涉及到了“属性”这个概念,而其英文术语则常常是Attribute、Property或者Field。

很多人一概称之为“属性”,有的地方确实可以不加区分,但有的地方却是差之毫厘、谬以千里。

我对于这些纷纷扰扰的技术和术语也很苦恼,但是我们至少可以通过UML中的这两个术语的解释找到一个可以参考的标准。

无论如何,UML是面向对象技术的集大成者和事实上的标准。

很客观的说,UML1.4中对于这两个术语并没有很清晰的定义,但是其区别还是显而易见的。

Attribute应该是UML1.4中的宠儿,而Property连一个单独的术语都没有捞到。

谁也没想到在UML2.0中风云突变,Attribute从类图中消失了,而Property堂而皇之入主中原。

1。

4中 Attribute是与Classifier相关联的术语,它比Property的影响范围要小。

Class是Classifier的子类,因此Attribute也可以表示Class的属性。

从上面的定义还可以看出,Attribute可以是Classifier的实例的命名的槽。

对于Class来说,其实例就是Object,Object的槽就是对象的属性值槽。

因此,Attribute是可以作为对象的属性的。

而Property似乎没有这一层的含义。

按MOF(元对象设施,OMG的另一个规范,后面会有详细解释)的模型层次划分,Attribute涉及的模型层从M2到M0,而Property似乎只是M2层的概念。

2。

0中 Attribute这里仅仅指一个类元的结构特征,可以将类元的实例联系到一个或者一组具体值。

而没有提到实例的槽(slot)等等。

我猜想,这是因为UML2.0中已经把Attribute作为Property的一个子集了,所以关于实例的槽(slot)等等的具体赋值方法,都归结到Property的定义中解释了。

另外一点值得注意的是,Attribute的定义来自于术语表,而没有在元模型图中出现。

而Property出现在元模型图中,并且都做了详细而具体的解释。

这一点可以看出,UML强化Property,弱化Attribute的决心。

Attribute和Property的总结 这一节对Attribute和Property作一个小结,基于目前最新的UML2.0规范: l 总体上来说,Attribute是Property的子集,Property会在适当的时机表现为Attribute; l Property出现在类图的元模型中,代表了Class的所有结构化特征;Attribute没有出现在元模型中,它仅仅在Class的概念中存在,没有相应的语法了; l Property有详细的定义和约束,而Attribute没有详细的定义,因此也不能用OCL写出其约束。

l Property和Attribute都是M2层的概念。

在M1层,它们的实例是具体类的属性;在M0层,它们的实例的实例是具体对象的槽中存储的值。

对于property和attribute这两个名词都叫“属性”的问题,来源于国内it书籍翻译界的疏忽。

其实它们来源于两个不同的领域,attribute属于OOA/OOD的概念,而property属于编程语言中的概念。

下面我们来说明它们的异同。

Attribute Attributes是Microsoft .NET Framework文件的元数据,可以用来向运行时描述你的代码,或者在程序运行的时候影响应用程序的行为。

Property 属性是面向对象编程的基本概念,提供了对私有字段的访问封装,在C#中以get和set访问器方法实现对可读可写属性的操作,提供了安全和灵活的数据访问封装。

关于属性的概念,不是本文的重点,而且相信大部分的技术人员应该对属性有清晰的概念。

以下是简单的属性 区别 可以说两者没有可比性,只不过我们国家的语言特点才引起的歧异,其实只要记住Attribute是派生于System,Attribute类之下,它的主要作用是描述,比如某为了描述某个方法是来自与外部的dll, 可以写如下代码,这就是一个Attribute,他是一个描述(或者说声明) [DllImport("User32.dll")] Attribute也有很多系统的“默认”属性,见下表 预定义的属性 有效目标 说明 AttributeUsage Class 指定另一个属性类的有效使用方式 CLSCompliant 全部 指出程序元素是否与CLS兼容 Conditional Method 指出如果没有定义相关联的字符串,编译器就可以忽略对这个方法的任何调用 DllImport Method 指定包含外部方法的实现的DLL位置 STAThread Method(Main) 指出程序的默认线程模型为STA MTAThread Method(Main) 指出程序的默认模型为多线程(MTA) Obsolete 除了Assembly、Module、Parameter和Return 将一个元素标示为不可用,通知用户此元素将被从未来的产品 ParamArray Parameter 允许单个参数被隐式地当作params(数组)参数对待 Serializable Class、Struct、enum、delegate 指定这种类型的所有公共和私有字段可以被串行化 NonSerialized Field 应用于被标示为可串行化的类的字段,指出这些字段将不可被串行化 StructLayout Class、struct 指定类或结构的数据布局的性质,比如Auto、Explicit或sequential ThreadStatic Field(静态) 实现线程局部存储(TLS)。

不能跨多个线程共享给定的静态字段,每个线程拥有这个静态字段的副本 而Property是指编程过程中的字段,也即类的成员。

如: private int hour; //定义私有变量表示"小时",外部是访问不到的.} public int Hour// 定义Hour程序接口 { set { hour=value; } get { return hour;}

C#中的特性(Attribute)用途?

C# 特性(Attribute)详细介绍 1、什么是Atrribute 首先,我们肯定Attribute是一个类,下面是msdn文档对它的描述: 公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型、字段、方法和属性等。

Attributes和Microsoft .NET Framework文件的元数据保存在一起,可以用来向运行时描述你的代码,或者在程序运行的时候影响应用程序的行为。

在.NET中,Attribute被用来处理多种问题,比如序列化、程序的安全特征、防止即时编译器对程序代码进行优化从而代码容易调试等等。

下面,我们先来看几个在.NET中标准的属性的使用,稍后我们再回过头来讨论Attribute这个类本身。

(文中的代码使用C#编写,但同样适用所有基于.NET的所有语言) 2、Attribute作为编译器的指令 在C#中存在着一定数量的编译器指令,如:#define DEBUG, #undefine DEBUG, #if等。

这些指令专属于C#,而且在数量上是固定的。

而Attribute用作编译器指令则不受数量限制。

比如下面的三个Attribute: Conditional:起条件编译的作用,只有满足条件,才允许编译器对它的代码进行编译。

一般在程序调试的时候使用。

DllImport:用来标记非.NET的函数,表明该方法在一个外部的DLL中定义。

Obsolete:这个属性用来标记当前的方法已经被废弃,不再使用了。

c#中的类或方法上的"[ ]"的作用

这是标识类或者方法的特性 比如在建立一个webservers的时候 能够被调用的方法上面需要加上 [WebMethod] 这个特性 其实没什么 举个简单的例子: 先定义个特性 从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); } }

get set如何用

这是一个简的例子: 程序代码: class A { private string s = null; public string S { get { Console.WriteLine("Getting S."); return s; } set { Console.WriteLine("Setting S."); this.s = value; } } } static void Main() { A a = new A(); a.S = "Test"; // 显示 "Setting S." string s = a.S; // 显示 "Getting S." 类中的变量为了安全一般是private的,但是外部有时要访问它的话,就用get,set了,说白了算是类的一个属性,通过这个属性可以访问这个私有变量。

而且可以决定变量的访问权限,get说明它可读,set说明它可写。

也就是说只有get的话说明你不可以给他赋值,只有set的话你不能获取它的值。

c# Attribute 怎么用

假设你的F()方法是定义在下面这个类里面: public class MyClass { [IStudent(Name = "abc", Age = 20)] public void F() { } } 那么可以这么去取值: Type type = typeof(MyClass); MethodInfo methodInfo = type.GetMethod("F"); if (methodInfo.IsDefined(typeof(IStudentAttribute), false)) { object[] attributes = methodInfo.GetCustomAttributes(typeof(IStudentAttribute), false); IStudentAttribute studentAttr = (IStudentAttribute)attributes[0]; Console.WriteLine(studentAttr.Name + studentAttr.Age); } 实际上,Attribute可以有很多用处,比如说,你可以在某个方法上做标记看有没有权限调用,或者在某个属性上标记,看要如何校验。

例如(实在习惯用var关键字了,下面的代码都用var了,还有Linq): 假设我们有这么一个标记来说明操作的权限: /// <summary> /// 声明权限的标记 /// </summary> [AttributeUsage(AttributeTargets.Method)] public class PermissonAttribute : Attribute { public string Role { get; set; } public PermissonAttribute(string role) { this.Role = role; } public PermissonAttribute() { } } 有一个操作类应用了该标记: /// <summary> /// 文件操作类 /// </summary> public class FileOperations { /// <summary> /// 任何人都可以调用Read /// </summary> [Permisson("Anyone")] public void Read() { } /// <summary> /// 只有文件所有者才能Write /// </summary> [Permisson("Owner")] public void Write() { } } 然后我们写一个工具类来检查操作权限 /// <summary> /// 调用操作的工具类 /// </summary> public static class OperationInvoker { public static void Invoke(object target, string role, string operationName, object[] parameters) { var targetType = target.GetType(); var methodInfo = targetType.GetMethod(operationName); if (methodInfo.IsDefined(typeof(PermissonAttribute), false)) { // 读取出所有权限相关的标记 var permissons = methodInfo .GetCustomAttributes(typeof(PermissonAttribute), false) .OfType<PermissonAttribute>(); // 如果其中有满足的权限 if (permissons.Any(p => p.Role == role)) { methodInfo.Invoke(target, parameters); } else { throw new Exception(string.Format("角色{0}没有访问操作{1}的权限!", role, operationName)); } } } } 最后,在使用的时候: var role = "Anyone"; var opertion = new FileOperations(); // 可以正常调用Read OperationInvoker.Invoke(operation, "Read", null); // 但是不能调用Write OperationInvoker.Invoke(operation, "Write", null);

香港2GB内存DIYVM2核(¥50月)香港沙田CN2云服务器

DiyVM 香港沙田机房,也是采用的CN2优化线路,目前也有入手且在使用中,我个人感觉如果中文业务需要用到的话虽然日本机房也是CN2,但是线路的稳定性不如香港机房,所以我们在这篇文章中亲测看看香港机房,然后对比之前看到的日本机房。香港机房的配置信息。CPU内存 硬盘带宽IP价格购买地址2核2G50G2M1¥50/月选择方案4核4G60G3M1¥100/月选择方案4核8G70G3M4¥200/月选择...

A400:36元/季,16.8/月kvm架构,线路优质,延迟低

A400互联是一家成立于2020年的商家,主要推行洛杉矶服务器采用kvm架构,线路优质,延迟低,稳定性高!全场产品对标腾讯云轻量,服务器线路有有美国洛杉矶cn2_gia、香港cn2+cmi,目前推行的vps服务器均为精心挑选的优质线路机房,A400互联推出了夏季优惠洛杉矶5折、香港7折促销活动,质量可靠,价格实惠!二:优惠码洛杉矶五折优惠码:20210620香港cn2七折优惠码:0710三、优惠方...

青云互联:香港安畅CN2弹性云限时首月五折,15元/月起,可选Windows/可自定义配置

青云互联怎么样?青云互联是一家成立于2020年的主机服务商,致力于为用户提供高性价比稳定快速的主机托管服务,目前提供有美国免费主机、香港主机、韩国服务器、香港服务器、美国云服务器,香港安畅cn2弹性云限时首月五折,15元/月起;可选Windows/可自定义配置,让您的网站高速、稳定运行。点击进入:青云互联官方网站地址青云互联优惠码:八折优惠码:ltY8sHMh (续费同价)青云互联香港云服务器活动...

attributeusage为你推荐
显卡挖矿啥意思请问显卡爱好者口中常挂的“挖矿”是什么意思?鲁大师中的显卡挖矿指数又是什么意思?求科普!rbf神经网络rbf神经网络的输入参数个数有上限么foxmail邮箱注册如何注册FOXMAIL邮箱的帐号啊?网关和路由器的区别路由器和网关有什么区别?拓扑关系什么是矢量数据、栅格数据、拓扑关系?tvosTVOS推广怎么样?inode智能客户端inode智能客户端无法正常启动,根本开都开不了民生电商陆金所、民生电商哪个更适合投资?数据分析报告范文800字统计分析报告pci数据捕获和信号处理控制器大侠们,PCI数据捕获和信号处理控制器不能正常工作了要怎么解决啊,是不是要安装主板驱动啊?
域名备案只选云聚达 中国万网域名 kvmla 缓存服务器 个人免费空间 ca4249 vip购优汇 北京双线 泉州电信 阿里校园 gtt idc查询 1元域名 linode支付宝 秒杀品 cdn网站加速 umax 贵州电信 腾讯云平台 winserver2008r2 更多