2009-06-12 5 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を拡張します。 (継承も問題ありません)しかし、これにはいくつかの問題があります!まず第一に、醜い必須の "これ"。ブリーチ。第二に、それは乱雑な共依存システムです。

ここで私が達成しようとしてんだよ:私は文を簡単にしたい

  • 私は簡単にクラスに静的メソッドを拡張する方法(宣言を使用しては罰金です)したい

    • :ConnectRS232() ;
    • 私がする必要がない場合、私は部分的なクラスでfutzする必要はありません。
    • 私はインターフェイスの継承を使っても問題ありません。

    私はコメントから追加の質問をすることは自由ですが、回答がない限り、回答を投稿しないでください!

    編集:質問の代わりに、自分のシステムでC#スクリプト(www.cs-script.com)のJITコンパイルを行っていますが、これらのスクリプトはほとんどがプログラマー以外の人が書いています。何年もの間スクリプトのために本当に "特別な"独自の言語を使用していました。私は事を地獄のように単純なものにしたい、そして "この"コールの全部が混乱のように見える。

  • 答えて

    1

    私は

    あなたの「拡張子が」唯一のコンパイル時間になります...私はこの中のポイントを参照してくださいわかりません。拡張メソッドは静的メソッドとしてのみ動作し、名前空間のインポート時にこれを構築しているので、どのようなIoCよりもコンパイル時の構造になります。 (拡張メソッドは単にコンパイル時のものであり、実行時には何もしません)

    また、上記のステートメントでthis.Method()を使用することは面倒ではありません。通常はこれはStyleCopのようなツールがすべてのメソッド呼び出しでそれを行うことを強制する理由です)。

    これがどのように使用されるかの良い例を教えてもらえますか?今のところ、実際のメリットはなく、1つではなく2つの場所にコードを置く方法のようです。

    +0

    ああ、CommunicationProtocols.RS232なしでコンパイルするとコンパイルされたプログラムが小さくなります。 – Brian

    +0

    True Brian :-)また、 'this'ステートメントについては、スレッディングや継承について心配する必要のないメソッドでそれらを使用するのは非常に間違っていると思います。 – Firoso

    +0

    編集が更新されました。最後をお読みください。 – Firoso

    関連する問題