首页 > 代码库 > .net之特性(Attribute)
.net之特性(Attribute)
看了一些关于这方面的文档,自我总结:
特性(Attribute)就是对一个方法或类做的一个额外的属性说明,也就是附加说明
下面是我自己抄的一个实例程序:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Reflection;namespace SomeTest{ 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("不允许执行"); Console.ReadKey(); } } class demo { [AllowExecute("jack,Tom")] public void Test() { } } /// <summary> /// 标识某方法允许执行的用户 /// </summary> public class AllowExecuteAttribute : Attribute { /// <summary> /// /// </summary> /// <param name="allowedUsers">允许执行的用户名的串联字符串</param> public AllowExecuteAttribute(string allowedUsers) { this._allowedUsers = allowedUsers; } private string _allowedUsers; public bool Check(string userName) { return this._allowedUsers.ToLower().IndexOf(userName.ToLower()) > -1; } }}
下面是公司项目中MVC中对AuthorizeAttribute特性的一些使用方法:
public class SingleUserAuthorize : AuthorizeAttribute { [ValidateInput(false)] protected override bool AuthorizeCore(HttpContextBase httpContext) { Hashtable userOnline = (Hashtable)(httpContext.Application["Online"]); if (userOnline != null) { IDictionaryEnumerator idE = userOnline.GetEnumerator(); string strkey = string.Empty; if (userOnline.Count > 0) { while (idE.MoveNext()) { //登录时判断保存的session是否与当前页面的session相同 if (userOnline.Contains(httpContext.Session.SessionID)) { if (idE.Key != null && idE.Key.ToString().Equals(httpContext.Session.SessionID)) { //判断当前session保存的值是否为被注销值 if (idE.Value != null && "XXXXXX".Equals(idE.Value.ToString())) { //验证被注销则清空session userOnline.Remove(httpContext.Session.SessionID); httpContext.Application.Lock(); httpContext.Application["Online"] = userOnline; httpContext.Response.Write("<script>top.location.href=http://www.mamicode.com/‘/Home/Message?message=offline‘;</script>"); httpContext.Response.End(); return false; } } } else { return false; } } return true; } else { return false; } } return false; } }
感觉这个违背了特性的设计初衷啊
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。