关于Attribute的一些学习
来源:互联网 发布:平价补水面膜推荐知乎 编辑:程序博客网 时间:2024/06/06 02:35
如有不明白的地方欢迎加QQ群14670545 探讨
namespace Con_Attribute{ /// <summary> /// "Sports" 是给构造函数的赋值, Level = 5 是给属性的赋值。 /// </summary> [HobbyAttribute("Sports", Level = 5)] class Student { public string profession; public string Profession { get { return profession; } set { profession = value; } } } class HobbyAttribute : System.Attribute { //兴趣类型 private string type; public string Type { get { return type; } set { type = value; } } //兴趣指数 private int level; public int Level { get { return level; } set { level = value; } } /// <summary> /// 构造函数 /// </summary> /// <remarks>参数值为null的string 危险,所以必需在构造函数中赋值</remarks> /// <param name="_type"></param> public HobbyAttribute(string _type) { this.Type = _type; } }}
下面我们来调用一下看看效果:
class Program { static void Main(string[] args) { #region demo2 //通过反射得到Student类的信息 System.Reflection.MemberInfo info = typeof(Student); HobbyAttribute hobbyatt = (HobbyAttribute)Attribute.GetCustomAttribute(info, typeof(HobbyAttribute)); if (hobbyatt != null) { Console.WriteLine("类名:{0}", info.Name); Console.WriteLine("兴趣类型:{0}", hobbyatt.Type); Console.WriteLine("兴趣指数:{0}", hobbyatt.Level.ToString()); Console.Read(); } #endregion } }
运行结果如下:
或许我们能做些事情,比如页面权限控制。通过Attribute得到该页面.cs类的信息,然后去数据库里面的权限部分匹配,嗯,只是一个思路吧,回头再看看其它效果。
//属性测试//[TestAttribute(ccvalue="hello")]public class AATest : UIButton{public AATest (){}}//[AttributeUsage(AttributeTargets.Method|AttributeTargets.Class)] [AttributeUsage(AttributeTargets.Method, AllowMultiple = false)] //TestAttribute类仅作用在方法上public class TestAttribute : Attribute{public string Role{ get; set;}public TestAttribute(string role){this.Role = role;}public TestAttribute(){}}public class SysDataManager{public SysDataManager(){}[TestAttribute("anyone")]public void ShowInfo(){Utils.Tools.Alert ("anyone:ShowInfo()");}[TestAttribute("admin")]public void Out2Excel(){Utils.Tools.Alert ("admin:Out2Excel()");}public void DeleteInfo(){Utils.Tools.Alert ("DeleteInfo()");}}public static class OperationInvoker{public static void Invoke(object target, string role, string operationName, object[] param){var methordinfo = target.GetType ().GetMethod (operationName); //获取所有方法if (methordinfo.IsDefined (typeof(TestAttribute), false)) {var permissons = methordinfo.GetCustomAttributes (typeof(TestAttribute), false).OfType<TestAttribute> ();if (permissons.Any (x => x.Role == role)) {methordinfo.Invoke (target, param);} else {//Console.WriteLine (string.Format ("{0}", role, operationName));Utils.Tools.Alert (string.Format ("角色{0}没有访问操作{1}的权限!", role, operationName));//throw new Exception (string.Format ("角色{0}没有访问操作{1}的权限!", role, operationName));}}}//...}
- 关于Attribute的一些学习
- 自定义控件的一些Attribute
- 关于学习的一些建议
- 关于学习的一些思考
- 关于TextView的一些学习
- 关于学习的一些想法
- 关于学习的一些思考
- 关于浮动的一些学习
- 关于 explicit 的一些学习
- 关于学习的一些思考
- 关于学习的一些思考
- 关于DialogFragment的一些学习
- 关于zookeeper的一些学习
- 关于Notification的一些学习
- 关于UML的一些学习
- 关于学习的一些思考
- Class Design: 一些有用的Attribute
- Unity3D 的一些Attribute (一些是5.0新的API)
- 基于eclipse的reviewboard插件
- 转 一套针对初学者的JavaScript教程
- div 高度设置问题
- javascript画直线和画圆的方法(非HTML5的方法)
- .NET平台下的依赖注入(IOC)和 面向切面(AOP)相结合简洁实用的使用方式
- 关于Attribute的一些学习
- 简析:阿里巴巴最近20个月的拆分史
- JQuery $.each用法
- drupal导入中文出现异常的解决方式
- 写博客的目的
- wordpress在LAMP平台搭建
- K3 12.2 多级审核失效时解决方案
- HttpClient URL编码方法
- 设计模式6大原则简介