オーダークラスへのリストタイプのアイテムと呼ばれる複合プロパティがあります。 GUI上で、ユーザーは名前、説明、価格、数量などのいくつかのフィールドを入力し、項目の追加ボタンをクリックして、項目を注文のリストに追加します。私がしたいのは、項目のIsCompleteプロパティをチェックするメソッドを作成し、必要なプロパティが設定されていることを確認するメソッドを作成して、誰かがorder.Items.Add(item)を呼び出すことができないようにする方法ですコンプリート。アイテムのIsCompleteプロパティがfalseを返す場合は、例外がスローされるようにしたいと思います。これについて簡単な方法は何でしょうか?List.Addメソッドが呼び出されたときにチェックを行います
答えて
これは、List<T>
を派生クラスにサブクラス化し、次にAdd
メソッドをオーバーライドすることで実現できます。
public class MyItemCollection : List<MyItem>
{
public override void Add(MyItem item)
{
if (item.IsComplete)
{
base.Add(item);
}
else
{
throw new InvalidOperationException("Unable to add an incomplete item");
}
}
}
ご注文のクラスは、プロパティを持っているでしょうMyItemCollection
むしろList<T>
よりも、そのよう:
public class Order
{
public MyItemCollection Items { get; set; }
}
ます。またObservableCollection<T>
使用することができます:それはINotifyCollectionChanged
を実装http://msdn.microsoft.com/en-us/library/ms668604.aspx
を:http://msdn.microsoft.com/en-us/library/System.Collections.Specialized.INotifyCollectionChanged.aspx以来
メソッドAdd(T)
はあなたが上書きできない仮想ではありません。
ObservableCollectionは、要素が追加されたときにイベントをスローできますが、この追加を元に戻すことはできません。
あなたは内部的storred List<T>
とのインタフェースIList<T>
を実装し、以下のようにexemple _list.Add(item)
を呼び出す前に、方法Add(T item)
に必要な検証を追加することができます。
public class MyItemCollection : IList<MyItem>
{
private List<MyItem> _list;
public MyItemCollection()
{
_list = new List<MyItem>();
}
public void Add(MyItem item)
{
if (item.IsComplete)
{
_list.Add(item);
}
else
{
throw new InvalidOperationException("Unable to add an incomplete item");
}
}
//Then you have to implement all the IList interface members...
}
この解決策の唯一の問題はそれということですボイラープレートのコードをたくさん書く必要があります。
List
の操作を担当するクラスが1つだけの場合は、対応するクラスにメソッドAddToMyItemCollection(MyItem item)
を実装することもできます。 GRASPパターンを尊重しても実用的です。(Instance.getC()はInstance.getA()よりも好ましいです。getB()。getC())
- 1. アプリケーションがバックグラウンドから呼び出されたときにメソッドを呼び出す
- 2. Ionic Ajaxイオンチェックボックスがチェックされたときに呼び出されます。
- 3. トランジェントエンドが呼び出されたときにjavascriptメソッドが呼び出されない
- 4. "TypeError:if文(Python)でメソッドが呼び出されたときに 'str'オブジェクトが呼び出されません '
- 5. ListPreferencesが変更されたときにonPreferenceChangeメソッドが呼び出されない
- 6. クラスの他のメソッドが呼び出されたときに、クラスのメソッドを呼び出す方法(Ruby)
- 7. メソッドが呼び出された行に例外がスローされます
- 8. メソッドが呼び出されたときにCurret日付がアングルで呼び出される
- 9. メソッドを呼び出すときにパラメータが変更される
- 10. 呼び出されたときにのみメソッドを実行する方法は?
- 11. 他のメソッドが呼び出されたときにPythonクラスが実行されるメソッド
- 12. SQLiteOpenHelperのonCreateメソッドが呼び出されたときは?
- 13. task.execute()が呼び出されたときにASyncTaskが実行されない
- 14. onUpgradeとonCreateが呼び出されたときに実行されません
- 15. mainメソッドで呼び出されたとき、メソッドは上から下に実行されますか?
- 16. PHP:メソッドが呼び出されるたびに実行されるマジックメソッド
- 17. 呼び出されたメソッドの前に実行されるトースト
- 18. メソッドがラムダで呼び出されたときにブレークポイントがヒットしない
- 19. BehaviorSubject.nextが呼び出されたときにObservable.subscribeメソッドが起動しない
- 20. 単体テスト中にメソッド呼び出しが試行されたが、実際には呼び出していないが、実際には呼び出さない
- 21. プログラムが実行されたときにWix PlanActionメソッドが呼び出されない
- 22. プログラムが実行されたときにForm1_Loadメソッドが呼び出されない理由
- 23. チェックボックスがチェックされているときにJS関数を呼び出す
- 24. どのオーバーロードされたメソッドが呼び出されますか?
- 25. Ios:Delegeteメソッドが呼び出されない
- 26. UICollectionViewLayoutメソッドが呼び出されない
- 27. メソッドonHandleIntent()が呼び出されない
- 28. CellForRowAtIndexメソッドが呼び出されない
- 29. オーバーライドされたメソッドを呼び出すと、オーバーライドされた呼び出しメソッドのスーパークラス
- 30. メソッド呼び出し後にRubyコードが実行されない
まさに私が探していたものです。ありがとう! –