惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
MyScale Blog
MyScale Blog
Microsoft Azure Blog
Microsoft Azure Blog
N
Netflix TechBlog - Medium
M
MIT News - Artificial intelligence
GbyAI
GbyAI
人人都是产品经理
人人都是产品经理
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园_首页
爱范儿
爱范儿
博客园 - 三生石上(FineUI控件)
L
LangChain Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
云风的 BLOG
云风的 BLOG
Y
Y Combinator Blog
L
LINUX DO - 热门话题
Project Zero
Project Zero
罗磊的独立博客
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
MongoDB | Blog
MongoDB | Blog
Spread Privacy
Spread Privacy
S
Schneier on Security
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
J
Java Code Geeks
P
Palo Alto Networks Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
博客园 - Franky
T
Threat Research - Cisco Blogs
D
Docker
Hugging Face - Blog
Hugging Face - Blog
S
Securelist
Google DeepMind News
Google DeepMind News
T
The Exploit Database - CXSecurity.com
L
Lohrmann on Cybersecurity
月光博客
月光博客
V
Vulnerabilities – Threatpost
NISL@THU
NISL@THU
V
Visual Studio Blog
AWS News Blog
AWS News Blog
I
Intezer
T
The Blog of Author Tim Ferriss
P
Privacy International News Feed
T
Tor Project blog
F
Full Disclosure
P
Proofpoint News Feed
SecWiki News
SecWiki News
H
Heimdal Security Blog
Help Net Security
Help Net Security
The Hacker News
The Hacker News

博客园 - 冯岩

RSA算法 Android JAVA C#互通 jquery.autocomplete.js 插件的自定义搜索规则 LINQ TO SQL 动态查询 ASPX多服务器控件下使用Jquery.validate.js 接受来自服务器的数据连接时发生超时(30000 毫秒)问题原因及解决方法 防止网页被客户端IE缓存 dottext阅读之系统调度分析 Javascript对日期的操作 C#读取被进程占用的文件 SqlServer 无日志文件附加 windows2003远程桌面退出后系统自动注销的解决方法 JS获取触发事件元素的方法 JS处理选取值 Marquee首尾相连不间断移动 开始完全显示 c#将数据导入Excel另类方法 windows Server 2008常见问题及解决方法 .NET 特性Attribute[三] .NET 特性Attribute[一] [安装程序配置服务器失败]解决SQL Server2000安装失败
.NET 特性Attribute[二]
冯岩 · 2008-09-09 · via 博客园 - 冯岩

     .NET Framework中对Attribute的支持是一个全新的功能,这种支持来自它的Attribute类。在你的程序中适当地使用这个类,或者是灵活巧妙地利用这个类,将使你的程序获得某种在以往编程中很难做到的能力。我们来看一个例子:Ajax的流行,使得各种AJAX框架相继推出,.NET第三方提供的AJAX框架也很多,这里介绍一种Ajax.dll。

     相信使用过Ajax.dll的朋友都惊奇它的“神奇”功能。Ajax的意思是使用JS从客户端调用服务器端的函数并返回服务器端处理的结果,而没有出现AJAX之前,每步操作都是提交到服务器然后返回。这里需要朋友们注意一点,即,无论你是使用AJAX。还是普通的方式,我们的服务器端的方法业务逻辑都是不变的。Ajax.dll的方便之处即可,我们还是一样按常规的方式去开发服务器端的代码,方法。如果您发现某一个方法,如用户注册,希望它能提供AJAX在客户端调用的功能。这时对于开发人员来讲,我是不希望再重新去写一个页面,在其PageLoad里面重复写上这段代码。供客户端调用。这样就太繁锁。

     我们希望能以一种简单的方式实现。Ajax.dll就为我们提供了这样的方便。我们只需要在希望提供Ajax功能的函数前增加一个特性修饰,即可解决问题!非常简单方便!

     这里我并不是推广和介绍Ajax.dll的使用。而是以此为例,引出特性的一个实际应用。特性Attribute的最重要的作用就是在不改变我们代码业务逻辑的前提下,让代码“增强”它的功能。

     以上面开题为例子。我们来写一个简单的程序来模拟这个过程!

     首先写一个自定义的Attribute类来描述需要提供Ajax方法的特性

//该特性仅限于应用在方法上
    [AttributeUsage(AttributeTargets.Method)] 
    
public class AjaxAttribute:Attribute
    {
        
//模拟二个参数仅为示例
        private bool asy;//是否异步
        private bool debugMode;//是否调试模式
public AjaxAttribute(bool asy)
        {
            Asy 
= asy;
        }
        
public bool Asy
        {
            
get{return asy;}
            
set{asy = value;}
        }
public bool DebugMode
        {
            
get{return debugMode;}
            
set{debugMode = value;}
        }
    }

应用类的代码如下:

    class Class1
    {
        
        
static void Main(string[] args)
        {
            Type t 
= typeof(Class1);   
            
foreach(MemberInfo m in t.GetMethods())   
            {   
                
foreach(Attribute a in m.GetCustomAttributes(true))   
                {    
                    
if(a is AjaxAttribute)
                    {
                        
//程序在运行时发现了需要提供AJAX功能的方法,然后将该方法进行相应的处理!过程省略。以下是模拟
                        Console.WriteLine("{0}类中的{1}方法提供异步属性为{2}的Ajax功能",t.Name,m.Name,((AjaxAttribute)a).Asy);   
                    }
                }   
            }   

            
            Console.ReadLine();

        }

//需要提供Ajax功能的函数。增加以下特性即可告知编译器。
        [Ajax(true,DebugMode=false)]
        
public string RegisterUser()
        {            
            
return "new user";
        }

    }

运行结果如下:

上述示例 演示了一个自定义的特性,以及读取出一个类中应用了该特性的方法!

这样就模拟出 在不改变一个类现有功能的前提下我们可以知道该类中哪些方法是用户希望“提供AJAX调用”的功能。

可以理解为Attribute是向一个元素(可以是类,方法,属性,参数等)添加附加信息的角色。而这些附加信息有时对于我们是非常重要的!