
Explanation:
ボックス 1: はい
クラス拡張 - メソッドのラッピングとコマンド チェーン。
クラス拡張またはクラス拡張の機能が改善されました。拡張している基本クラスで定義されているメソッドをロジックでラップできるようになりました。イベント ハンドラーを使用しなくても、パブリック メソッドとプロテクト メソッドのロジックを拡張できます。メソッドをラップすると、パブリック メソッドとプロテクト メソッド、および基本クラスの変数にもアクセスできます。このようにして、トランザクションを開始し、クラスに関連付けられている状態変数を簡単に管理できます。
ボックス 2: はい
次の例では、doSomething のラッパーと必要な next キーワードの使用により、メソッドのコマンド チェーン (CoC) が作成されます。CoC は、一連の受信者によって要求が処理される設計パターンです。このパターンは、送信側と受信側の疎結合をサポートします
[ExtensionOf(classStr(BusinessLogic1))]
最終クラス BusinessLogic1_Extension
{
str doSomething(int arg)
{
// パート1
var s = 次の doSomething(arg + 4);
// パート2
戻り値;
}
}
ボックス 3: はい
インスタンスおよび静的メソッドは、拡張クラスによってラップできます。静的メソッドがラップされるターゲットである場合、拡張機能のメソッドは static キーワードを使用して修飾する必要があります。
ボックス 4: いいえ
ラッパー メソッドは常に next を呼び出す必要があります。
注: 拡張クラスのラッパー メソッドは常に next を呼び出す必要があるため、チェーン内の次のメソッドと、最後に元の実装が常に呼び出されます。この制限により、チェーン内のすべてのメソッドが結果に寄与することが保証されます。
この制限の現在の実装では、next の呼び出しはメソッド本体の第 1 レベルのステートメントにある必要があります。
いくつかの重要なルールを次に示します。
* if ステートメント内で条件付きで next を呼び出すことはできません。
* next への呼び出しは、while、do-while、または for ループ ステートメントでは実行できません。
* next ステートメントの前に return ステートメントを配置することはできません。
※論理式は最適化されているため、next の呼び出しは論理式で発生しません。実行時に、完全な式の実行は保証されません。
参照:
https://docs.microsoft.com/en-us/dynamics365/fin-ops-core/dev-itpro/extensibility/method-wrapping-coc