如何在IronPython中使用C#扩展方法
2009-04-25 08:25:46 来源:WEB开发网在现在的开发过程中为了减少单个文件的代码量,降低协同开发时文件被独占锁定的几率,我们经常会使用扩展方法。扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。
随着DLR的广泛使用,面临越来越多需要C#代码和脚本语言交互的需求。(如果你知道如何使用,建议去DLR的官方网站去看看)但是,对于扩展方法来说如果直接使用会有发现DLR无法查找到指定的方法。
Foo方法是一个扩展方法,虽然你可以不经雕琢的使用import方法导入你的DLL和类型定义,但是DLR引擎无法识别Foo方法,会引发AttributeError错误。为了解决这个问题,需要使用 Microsoft.Scripting.Runtime.ExtensionType扩展标识。
1[AttributeUsage(AttributeTargets.Assembly, Inherited=false, AllowMultiple=true)]
2public sealed class ExtensionTypeAttribute : Attribute
3{
4 // Fields
5 private readonly Type _extends;
6 private readonly Type _extensionType;
7
8 // Methods
9 public ExtensionTypeAttribute(Type extends, Type extensionType)
10 {
11 if (extends == null)
12 {
13 throw new ArgumentNullException("extends");
14 }
15 if (((extensionType != null) && !extensionType.IsPublic) && !extensionType.IsNestedPublic)
16 {
17 throw Error.ExtensionMustBePublic(extensionType.FullName);
18 }
19 this._extends = extends;
20 this._extensionType = extensionType;
21 }
22
23 // Properties
24 public Type Extends
25 {
26 get
27 {
28 return this._extends;
29 }
30 }
31
32 public Type ExtensionType
33 {
34 get
35 {
36 return this._extensionType;
37 }
38 }
39}
40
41
42
构造器 第一个参数是你扩展的目标类型,第二个参数是实现扩展方法的类。
Tags:如何 IronPython 使用
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接