4

これが機能するなら素晴らしいことです。自分のアイデアを間違った方法で実装しようとしていますか?

部分メソッドを使用して、既存のコードを拡張し、メソッドの実装を単純にプラグイン/プラグアウトできるようにしたいと考えています。

基本的に、参照が述べていることとまったく同じです:

部分メソッドを使用すると、クラス デザイナーは、イベント ハンドラーと同様に、開発者が実装するかどうかを決定できるメソッド フックを提供できます。開発者が実装を提供しない場合、コンパイラはコンパイル時に署名を削除します。

これを使用する最初の試みは次のとおりです。

DefinitionsBase.cs:

namespace ABC {
    public partial class Definitions {
        // No implementation
        static partial void TestImplementaion();
    }
}

DefinitionsExt.cs:

namespace ABC {
    public partial class Definitions {
        static partial void TestImplementaion(){
            // Implementation is here
        }
    }
}

Program.cs:

namespace ABC {
    class Program {
        static void Main(string[] args) {
            Definitions.TestImplementaion();
        }
    }
}

それは同じ名前空間ですが、参照が述べているように、部分メソッドは暗黙的に privateです。アクセス修飾子を受け入れず、クラスから呼び出すことができません。意図したとおりに使用する方法はありますか?

ありがとう!

4

1 に答える 1

3

プライベート メソッドを呼び出すパブリック メソッドを使用することもできますが、これが必要かどうかはわかりません。これにより、コードが機能するようになります。

部分メソッドは定義上プライベートであるため、コンパイル時にメソッドが実装されていない場合、コンパイラはすべてのコードを調べて、メソッドへのすべての可能な参照を見つけて削除する必要はありません。部分メソッドは必ずしも実装する必要がないため、これは設計上の選択です。コンパイラは部分クラスの実装のみを調べ、すべてのコードを調べるわけではありません。部分メソッドを呼び出すパブリック メソッドを実装し、部分メソッドが実装されていない場合、コード内のどこからでもその部分メソッドにアクセスできる場合でも、コンパイラは部分クラス ファイルとコードのみを検索します。

于 2015-09-22T07:37:59.670 に答える