C#中的特性(Attribute)用途?
你好:1、问C#中的特性(Attribute)都有什么用途?2、它可以用来验证某用户是否有操作某方法的权限吗?我没有什么分,还请帮忙解答一下如果可以用来验证某用户是否有操...
你好:
1、问C#中的特性(Attribute)都有什么用途?
2、它可以用来验证某用户是否有操作某方法的权限吗?
我没有什么分,还请帮忙解答一下
如果可以用来验证某用户是否有操作某方法的权限,请给个例子好吗,谢谢啦 展开
1、问C#中的特性(Attribute)都有什么用途?
2、它可以用来验证某用户是否有操作某方法的权限吗?
我没有什么分,还请帮忙解答一下
如果可以用来验证某用户是否有操作某方法的权限,请给个例子好吗,谢谢啦 展开
4个回答
展开全部
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:这个属性用来标记当前的方法已经被废弃,不再使用了。
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:这个属性用来标记当前的方法已经被废弃,不再使用了。
2012-08-14
展开全部
1、就是可以在类、方法、属性等 增加一些额外信息,类似java的annotation。
2、可以。但是需要对方法进行拦截,在对方法调用之前,利用反射等方法可以取得这些额外信息,从而进行判断。
2、可以。但是需要对方法进行拦截,在对方法调用之前,利用反射等方法可以取得这些额外信息,从而进行判断。
追问
那么如何在调用方法之前,利用反射验证呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一个问题,你可以参考我的另一个回答:http://zhidao.baidu.com/question/463506213.html。
第二个问题,答案是可以。例子,我明天早上补充给你。
第二个问题,答案是可以。例子,我明天早上补充给你。
追问
请问,如果方便可以把例子发给我看看吗,谢谢了 ^_^
追答
给个Demo给你:
class Program
{
static void Main(string[] args)
{
Demo d=new Demo();
string userName="Lucy";
MethodInfo mi=d.GetType().GetMethod("Test");
if (mi == null) return;
AllowExecuteAttribute att=Attribute.GetCustomAttribute(mi, typeof(AllowExecuteAttribute)) as AllowExecuteAttribute;
if (att == null) return;
if (att.Check(userName))
Console.WriteLine("允许执行");
else
Console.WriteLine("不允许执行");
}
}
class Demo
{
[AllowExecute("Jack, Tom")]
public void Test() { }
}
///
/// 标识某方法允许执行的用户
///
[AttributeUsage(AttributeTargets.Method)]
public class AllowExecuteAttribute : Attribute
{
///
///
///
/// 允许执行的用户名的串联字符串
public AllowExecuteAttribute(string allowedUsers)
{
this._allowedUsers = allowedUsers;
}
private string _allowedUsers;
public bool Check(string userName)
{
return this._allowedUsers.ToLower().IndexOf(userName.ToLower()) > -1;
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-08-13
展开全部
C#中的特性(Attribute)它是用来标识类、方法的附加属性
追问
你说的这些我知道,主要是想知道第二个问题,能具体说说吗。如果是复制过来的就算了,那些讲的不清楚
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询