他可以用來延伸原本的物件,加入一個自定的方法
使用上就跟原本物件一樣用 『 . 』接下去就好
舉個例子
我想要再原本的string上多一個方法叫做sayHello()
以往的作法可能向這樣
public void main() { string name = "Ina"; string sayHi = sayHello(name); } public string sayHello(string name) { return string.format("Hello, I'm {0}",name); }
使用Extension 延伸原本的string物件方法
public void main() { string name = "Ina"; string sayHi = name.sayHello(); }
原生的string並沒有sayHello(),使用Extension,不需要繼承或建立新的物件
就能使string多一個sayHello()方法
好吧,我不得不承認這個範例是有點蠢
但我還是想使用這個範例說明建構步驟
首先第一步,先建立一個static class
namespace myproject.util{ public static class StringExtension() { } }
2. 然後再裡面新增一個靜態方法 sayHello
namespace myproject.util{ public static class StringExtension() { public static string sayHello(this string name) { return string.format("Hello, I'm {0}",name); } } }
然後記得要用的時候要 using myproject.util 不然會找不到
這樣就大功告成了
必須要注意的地方是
靜態方法中的第一個參數一定要this string,代表我現在在用的string物件
如果有其他參數要帶入的話,直接在後面加上即可,例如
public static string sayHello(this string name, int age) { return string.format("Hello, I'm {0}. I'm {1} years old",name, age.ToString()); }
老實說,從這個範例實在看不出他的好處
甚至覺得有點蠢蠢的,但是要定義一個通用的方法
不需要使用繼承就可以全系統使用,真的是蠻方便的
而且Extension可以散落各地
雖然都是string的延伸,但是可以根據使用情況不同
寫在不同的cs檔案中
避免共同編輯同一份文件造成衝突
也比較好管理
沒有留言:
張貼留言