在現在的開發過程中為了減少單個文件的代碼量,降低協同開發時文件被獨占鎖定的幾率,我們經常會使用擴展方法。擴展方法使您能夠向現有類型“添加”方法,而無需創建新的派生類型、重新編譯或以其他方式修改原始類型。擴展方法是一種特殊的靜態方法,但可以像擴展類型上的實例方法一樣進行調用。
隨著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
構造器 第一個參數是你擴展的目標類型,第二個參數是實現擴展方法的類。