WEB开发网
开发学院软件开发C语言 如何在IronPython中使用C#扩展方法 阅读

如何在IronPython中使用C#扩展方法

 2009-04-25 08:25:46 来源:WEB开发网   
核心提示:在现在的开发过程中为了减少单个文件的代码量,降低协同开发时文件被独占锁定的几率,如何在IronPython中使用C#扩展方法,我们经常会使用扩展方法,扩展方法使您能够向现有类型“添加”方法,需要使用 Microsoft.Scripting.Runtime.ExtensionType扩展标识,1[

在现在的开发过程中为了减少单个文件的代码量,降低协同开发时文件被独占锁定的几率,我们经常会使用扩展方法。扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。

随着DLR的广泛使用,面临越来越多需要C#代码和脚本语言交互的需求。(如果你知道如何使用,建议去DLR的官方网站去看看)但是,对于扩展方法来说如果直接使用会有发现DLR无法查找到指定的方法。

如何在IronPython中使用C#扩展方法

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 使用

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