ホームページ > バックエンド開発 > C++ > ICommand 実装でカスタム デリゲートを使用することは、インスタンス化の繰り返しを避けるための最良の方法ですか?

ICommand 実装でカスタム デリゲートを使用することは、インスタンス化の繰り返しを避けるための最良の方法ですか?

Barbara Streisand
リリース: 2025-01-20 17:21:11
オリジナル
825 人が閲覧しました

Is Using Custom Delegates in an ICommand Implementation the Best Approach for Avoiding Repeated Instantiation?

MVVM での ICommand 実装: インスタンス化の繰り返しを避ける

質問:

ICommand インスタンスを繰り返し作成することを避けるために、カスタム デリゲートを使用して ICommand クラスを実装しようとしました。このクラスには、OnExecute (void デリゲート、オブジェクト パラメーターを受け入れる) と OnCanExecute (bool デリゲート、オブジェクト パラメーターを受け入れる) の 2 つのデリゲートが含まれています。

コードは次のとおりです:

<code class="language-csharp">public class TestCommand : ICommand
{
    public delegate void ICommandOnExecute(object parameter);
    public delegate bool ICommandOnCanExecute(object parameter);

    private ICommandOnExecute _execute;
    private ICommandOnCanExecute _canExecute;

    public TestCommand(ICommandOnExecute onExecuteMethod, ICommandOnCanExecute onCanExecuteMethod)
    {
        _execute = onExecuteMethod;
        _canExecute = onCanExecuteMethod;
    }

    //...
}</code>
ログイン後にコピー

このアプローチは機能しますが、その実装の妥当性と、より良い方法があるかどうかについては疑問があります。

解決策:

このアプローチは、一般的に使用される RelayCommand パターンに非常に似ていますが、RelayCommand はより成熟した最適化されたソリューションです。

RelayCommand 実装:

<code class="language-csharp">public class RelayCommand : ICommand
{
    private readonly Predicate<object> _canExecute;
    private readonly Action<object> _execute;

    public RelayCommand(Predicate<object> canExecute, Action<object> execute)
    {
        _canExecute = canExecute;
        _execute = execute;
    }

    //...
}</code>
ログイン後にコピー

使用法:

<code class="language-csharp">public class MyViewModel
{
    private RelayCommand _doSomething;

    public ICommand DoSomethingCommand
    {
        get
        {
            return _doSomething ??= new RelayCommand(
                p => this.CanDoSomething(),
                p => this.DoSomeImportantMethod());
        }
    }
}</code>
ログイン後にコピー

null 合体割り当て (??=) を使用して、RelayCommand インスタンスが 1 回だけ作成されるようにします。

参照:

RelayCommand または同様の事前構築済み実装を使用すると、カスタム デリゲートのさらなる複雑さを回避し、よりクリーンで信頼性の高いコードを取得できます。

以上がICommand 実装でカスタム デリゲートを使用することは、インスタンス化の繰り返しを避けるための最良の方法ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート