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
構造器 第一個參數是你擴展的目標類型,第二個參數是實現擴展方法的類。