浅谈Attribute [C# | Attribute | DefaultValueAttribute]
正文:
先看我的错误代码:
public class PowerAttribute : Attribute
{
/// <summary>
/// 对页面内控件进行权限判断,权限的字符串组成:URL+"?id"+Control.ID
/// 例如:/page/index?id=tbName
/// </summary>
/// <param name="pType"></param>
/// <param name="control"></param>
public PowerAttribute(PowerType pType, params WebControl[] control)
{
for (int i = control.Length; --i >= 0; )
{
WebControl Control = control.GetValue(i) as WebControl;
if (Control != null)
if (HasPower(string.Concat(WebHelper.WebRequest.Path, "?id=", Control.ID)) == -1)//判断权限
if (pType == PowerType.Visible)
Control.Visible = false;
else
Control.Enabled = false;
}
}
public int HasPower(string path)
{
return -1;
}
/// <summary>
/// 获得控件的权限,1 具有权限,0 用户超时,-1 没有权限
/// </summary>
/// <param name="control"></param>
/// <param name="Field"></param>
public PowerAttribute(WebControl control, ref int Field)
{
Field = HasPower(string.Concat(WebHelper.WebRequest.Path, "?id=", control.ID));
}
/// <summary>
/// 获得页面的权限,1 具有权限,0 用户超时,-1 没有权限
/// </summary>
/// <param name="control"></param>
/// <param name="Field"></param>
public PowerAttribute(ref int Field)
{
Field = HasPower(WebHelper.WebRequest.Path);
}
}
意图比较明显,想在要控制控件权限的页面里面加一个Attribute标记传入控件编号就能自动把其设置为指定的显示状态,可是失败了!以下是错误信息:
也就是说没法传,也不能够用ref来传递引用!也就是说没有办法直接改变页面上的控件或字段的值,这让我忽然想起了DefaultValueAttribute,MSDN的解释是
指定属性 (Property) 的默认值。我发现有许多朋友有点误会这个,先看代码:
{
AttributeCollection attributes = TypeDescriptor.GetProperties(new MyClass())["MyProperty"].Attributes;
/* Prints the default value by retrieving the DefaultValueAttribute
* from the AttributeCollection. */
DefaultValueAttribute myAttribute =
(DefaultValueAttribute)attributes[typeof(DefaultValueAttribute)];
Console.WriteLine("The default value is: " + myAttribute.Value.ToString());
Console.Read();
}
class MyClass
{
private bool myVal = false;
[DefaultValue(false)]
public bool MyProperty
{
get
{
return myVal;
}
set
{
myVal = value;
}
}
}
这是MSDN例子,注意看两点:
1. DefaultValue传入参数为false,而myVal设置的也是false
2. 再看调用的地方,是使用的DefaultValueAttribute,而不是直接访问的属性MyProperty
狐疑了吧,他设置的默认值不是属性MyProperty的默认值!!不信的话你可以把[DefaultValue(false)]改成[DefaultValue(true)],然后直接Console.WriteLine(new MyClass().MyProperty);!!
从上面参考的几篇文章中可以发现,Attribute可以做方法参数校验、也可以为过时的方法做标记 ObsoleteAttribute、为方法传参,虽然如此,但是仍然觉的使用起来并不方便,只是看起来比较酷罢了,一个类居然可以这样使用!!可以把这个类仅仅使用在类、方法、字段上,也可以使用所以地方,控制使用次数,显然仍然是有他的用处的,没法把你的代码和他耦合起来,也是用反射来实现相关功能的!!
说到这里实在还是不太明白,但是起码知道DefaultValueAttribute不是为当前类设置默认值的,所以使用的时候注意Attribute概念问题!欢迎大家提意见: )
本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/586471,如需转载请自行联系原作者
浅谈Attribute [C# | Attribute | DefaultValueAttribute]相关推荐
- iOS实录15:浅谈iOS Crash
导语:在当前的iOS开发中,虽然ARC为开发者解决了手动内存管理时代 的许多麻烦,但是内存方面的问题依然是产生iOS Crash的元凶之一,本文介绍内存方面,有关僵尸对象.野指针.内存泄漏.废弃内存这 ...
- matplotlib的默认字体_浅谈matplotlib默认字体设置探索
控制默认字体的设置 根据官方文档https://matplotlib.org/tutorials/text/text_props.html#default-font可知: The base defau ...
- vant-UI组件初使用:浅谈 - 解说篇
vant-UI(有赞UI)组件使用 "深入浅出".全局组件注册VS局部注册:有何区同? 默认开发者已经能够独立创建和搭建vue-cli项目 以vue默认生成的项目目录和文件为例:( ...
- python中dtype什么意思_浅谈python 中的 type(), dtype(), astype()的区别
如下所示: 函数 说明 type() 返回数据结构类型(list.dict.numpy.ndarray 等) dtype() 返回数据元素的数据类型(int.float等) 备注:1)由于 list. ...
- python命名规则数字开头的成语_浅谈Python中带_的变量或函数命名
搜索热词 Python 的代码风格由 PEP 8 描述.这个文档描述了 Python 编程风格的方方面面.在遵守这个文档的条件下,不同程序员编写的 Python 代码可以保持最大程度的相似风格.这样就 ...
- 浅谈OCR之Onenote 2010
原文:浅谈OCR之Onenote 2010 上一次我们讨论了Tesseract OCR引擎的用法,作为一款老牌的OCR引擎,目前已经开源,最新版本3.0中更是加入了中文OCR功能,再加上Google的 ...
- 浅谈人工智能:现状、任务、构架与统一
引言 第一节 现状:正视现实 第二节 未来:一只乌鸦给我们的启示 第三节 历史:从"春秋五霸"到"战国六雄" 第四节 统一:"小数据.大任务&q ...
- 浅谈Python类的属性和方法
浅谈Python类的属性和方法 参考文献 在python中,有私有属性和公有属性,方法我们也一样,他们之间有何区别? 还有类属性和实例属性又是怎么回事? 静态方法和类方法又有什么区别? 我们在工作过程 ...
- 浅谈Google认证失败项分析
https://www.cnblogs.com/houser0323/p/14002924.html 标签:Google认证.GMS认证.XTS失败项分析.Android.cts 作者:秋城 http ...
- 浅谈jQuery属性获取
浅谈jQuery的属性获取 基本标签设置与基本css,附图下所示 上述代码如下图: 一.js的一些属性获取 1.var div = document.getElementById("firs ...
最新文章
- GPT-3到来,程序员会被AI取代吗?
- juc java_深入理解JUC(java.util.concurrent)
- NUnitForms 测试GUI应用程序的优秀工具
- Hudson升级异常及解决办法
- ADS2017打开出现cannot create the directory,解决办法。
- 记录几个CentOS安装包(rpm)的下载地址-离线安装必备
- linux怎么查看定时任务有没有运行,怎么看crontab定时任务是否执行
- Collection如何转成stream以及Spliterator对其操作的实现
- 乘坐飞机时,有什么事情是机长和机上工作人员不想让乘客知道的?
- VMware Funsion 修改vmnet1/vmnet8默认网络地址及DHCP地址
- protues7 使用笔记
- ETERM操作和错误集合
- 计算机网络常见面试题目
- Android问题集锦(六)- adb不是内部或外部命令解决方法
- 运动神经元有哪些特征 容易与哪些疾病混淆
- 数据库生成日然周、自然月、自然日
- 渗透测试安全检测漏洞
- Python中英文翻译工具
- YOLOv5改进添加解耦头、ASFF
- codevs 2830 蓬莱山辉夜