2009-06-12 43 views
0

我想做一些事情,而不是......獨特的,也許有更好的方法來做到這一點,但...我正在做一個控制(ish)系統的倒置使用擴展方法來啓用/禁用組件所以在我詳細瞭解和迷惑你之前,讓我們看看一些代碼!如何爲使用模塊化擴展方法的類編寫乾淨的代碼?

using TestComponents.CommunicationProtocols.RS232; 
              //this brings in the 
              //ConnectRS232 extension method 

namespace TestMeNamespace 
{ 
    public class Test //Although this class is defined here, we extend it above 
    { 
     public void Start() 
     { 
      this.ConnectRS232(1, 9600); //calls the ConnectRS232 extension method 
     } 
    } 
} 

因此,簡而言之,使用聲明在與我們DEFINE測試相同的文件中擴展了Test。 (繼承會很好)但是這有一些問題!首先,醜陋的必要條件是「這個」。 BLECH。其次,這是一個混亂的依賴系統。

這裏就是我試圖實現:

  • 我想辦法輕鬆靜態方法擴展到一個類(使用聲明的罰款)
  • 我要發言很簡單:ConnectRS232() ;
  • 如果我不需要,我不想與部分類進行對話。
  • 我會很好的使用接口繼承。

請隨時通過評論問我其他問題,但請不要發佈答案,除非你有答案!

編輯:代替提出的問題,我在我的系統中進行一些JIT編譯的C#腳本(www.cs-script.com),而且這些腳本大部分都是由非程序員寫的多年來一直使用真正的「特殊」專有語言來編寫腳本。我想讓事情變得簡單,而一大堆「這個」電話看起來就像雜亂無章。

回答

1

我不知道我看到了一點這樣的...

你的「擴展名」將是唯一的編譯時間。擴展方法只能作爲靜態方法使用,並且由於您在導入名稱空間時構建了這種方法,所以它比任何形式的IoC更適合於編譯時構造。 (擴展方法只是一個編譯時的事情 - 它們在運行時並沒有真正做任何事情)。

另外,考慮到上述說法,擁有this.Method()看起來並不繁雜(通常使用這就是爲什麼諸如StyleCop之類的工具會強制您在每次方法調用時都這樣做)。

你能否給我們提供一個更好的例子來說明如何使用它?現在,它似乎是一種將代碼放在兩個地方而不是一個的方式,沒有真正的好處...

+0

啊,但如果他編譯沒有CommunicationProtocols.RS232,他將有一個較小的編譯程序。 – Brian 2009-06-12 20:36:59

相關問題