WEB开发网
开发学院软件开发C语言 Effective C# 原则42:使用特性进行简单的反射 阅读

Effective C# 原则42:使用特性进行简单的反射

 2009-02-19 08:17:38 来源:WEB开发网   
核心提示: 现在你将要创建一个命令句柄的示例,首先,Effective C# 原则42:使用特性进行简单的反射(5),你要用CommandHandler 特性标记类型,正如你所看到的,而且减少潜在的运行时错误,也就是说,我们习惯性的在附加特性到项目上时,在名字上省略Attribute:Now you&

现在你将要创建一个命令句柄的示例。首先,你要用CommandHandler 特性标记类型,正如你所看到的,我们习惯性的在附加特性到项目上时,在名字上省略Attribute:

Now you'll build a sample command handler. First, you tag the type with the CommandHandler attribute. As you see here, it is customary to omit Attribute from the name when attaching an attribute to an item:

[ CommandHandler ]
public class CmdHandler
{
 // Implementation coming soon.
}

在CmdHandler 类里面,你要添加一个属性来取回命令句柄。这个属性应该用DynamicMenu 特性来标记:

[DynamicMenu( "Test Command", "Parent Menu" )]
public EventHandler CmdFunc
{
 get
 {
  if ( theCmdHandler == null )
   theCmdHandler = new System.EventHandler
    (this.DynamicCommandHandler);
  return theCmdHandler;
 }
}
private void DynamicCommandHandler(
 object sender, EventArgs args )
{
 // Contents elided.
}

就是这了。这个例子演示了你应该如何使用特性来简化使用反射的程序设计习惯。你可以用一个特性来标记每个类型,让它提供一个动态的命令句柄。当你动态的载入这个程序集时,可以更简单的发现这个菜单命令句柄。通过应用AttributeTargets (另一个特性),你可以限制动态命令句柄应用在什么地方。这让从一个动态加载的程序集上查找类型的困难任务变得很简单:你确定从很大程度上减少了使用错误类型的可能。这还不是简单的代码,但比起不用特性,还算是不错的。

特性可以申明运行的意图。通过使用特性来标记一个元素,可以在运行时指示它的用处以及简化查找这个元素的工作。如何没有特性,你须要定义一些命名转化,用于在运行时来查找类型以及元素。任何命名转化都会是发生错误的起源。通过使用特性来标记你的意图,就把大量的责任从开发者身上移到了编译器身上。特性可以是只能放置在某一特定语言元素上的,特性同样也是可以加载语法和语义信息的。

你可以使用反射来创建动态的代码,这些代码可以在实际运行中进行配置。设计和实现特性类,可以强制开发者为申明一些类型,方法,以及属性,这些都是可以被动态使用的,而且减少潜在的运行时错误。也就是说,让你增加了创建让用户满足的应用程序的机会。

上一页  1 2 3 4 5 

Tags:Effective 原则 使用

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接