WEB开发网
开发学院软件开发C语言 Effective C# 原则43:请勿滥用反射 阅读

Effective C# 原则43:请勿滥用反射

 2009-02-19 08:17:35 来源:WEB开发网   
核心提示:创建二进制的组件时,同时也意味着你要使用迟后绑定和反射来查找你所须要的具有特殊功能代码,Effective C# 原则43:请勿滥用反射,反射是一个很有力的工具,而且它让你可以写出可动态配置的软件,你可以经常使用一个类厂来完成同样的任务,考虑下面的代码,使用反射,一个应用程序可以通过添加新的组件来更新功能

创建二进制的组件时,同时也意味着你要使用迟后绑定和反射来查找你所须要的具有特殊功能代码。反射是一个很有力的工具,而且它让你可以写出可动态配置的软件。使用反射,一个应用程序可以通过添加新的组件来更新功能,而这些组件是在软件最开始发布时没有的。这是有利的。

这一伸缩性也带来了一些复杂的问题,而且复杂问题的增加又会增加出现其它问题的可能。当你使用反射时,你是围绕着C#的安全类型。然而,成员调用的参数和返回值是以System.Object类型存在的。你必须在运行时确保这些类型是正确的。简单的说,使用反射可以让创建动态的程序变得很容易,但同时也让程序出现错误变得很容易。通常,简单的思考一下,你就可以通过创建一系列接口集合来最小化或者移除反射,而这些接口集合应该表达你对类型的假设。

反射给了你创建类型实例的功能,以及在对象上调用成员方法,以及访问对象上的成员数据。这听上去就跟每天的编程任务是一样的。确实是这样的,对于反射,并没有什么新奇的:它就是动态创建其它的二进制组件。大多数情况下,你并不须要像反射这样的伸缩功能,因为有其它可选的更易维护的方案。

让我们从创建一个给定类型的实例开始,你可以经常使用一个类厂来完成同样的任务。考虑下面的代码,它通过使用反射,调用默认的构造函数创建了一个MyType 的实例:

// Usage:Create a new object using reflection:
Type t = typeof( MyType );
MyType obj = NewInstance( t ) as MyType;
// Example factory function, based on Reflection:
object NewInstance( Type t )
{
 // Find the default constructor:
 ConstructorInfo ci = t.GetConstructor( new Type[ 0 ] );
 if ( ci != null )
  // Invoke default constructor, and return
  // the new object.
  return ci.Invoke( null );
 // If it failed, return null.
 return null;
}

1 2 3 4  下一页

Tags:Effective 原则 请勿

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