複数パラメータを監視して、制御したい際に public 変数にしていると管理が大変なので
Func を登録して戻り値で判定できるようにしてみました
クラス
using System; using System.Collections.Generic; /// <summary> /// Function を登録して、それが全部満たすか、もしくは満たさないかをチェックする /// </summary> public class ValidCheck { private List<Func<bool>> _locker = new List<Func<bool>>(); /// <summary> /// ブロックを判定する処理を外部から設定 /// </summary> public event Func<bool> Blockers { add { if (!_locker.Contains(value)) _locker.Add(value); } remove { if (_locker.Contains(value)) _locker.Remove(value); } } public bool Valid { get { foreach (var func in _locker) { var r = func.Invoke(); if (!r) return false; } return true; } } public bool InValid { get { foreach (var func in _locker) { var r = func.Invoke(); if (r) return false; } return true; } } }
サンプル
public class Sample { private ValidCheck _check = new ValidCheck(); private bool _test1; private bool _test2; private bool _test3; public bool Test1() => _test1; public bool Test2() => _test2; public bool Test3() => _test3; private void Main() { Console.WriteLine($"Valid {_check.Valid}"); // true Console.WriteLine($"InValid {_check.InValid}"); // true _check.Blockers += Test1; _check.Blockers += Test2; _check.Blockers += Test3; Console.WriteLine($"Valid {_check.Valid}"); // false Console.WriteLine($"InValid {_check.InValid}"); // true _test1 = true; Console.WriteLine($"Valid {_check.Valid}"); // false Console.WriteLine($"InValid {_check.InValid}"); // false _test1 = _test2 = _test3 = true; Console.WriteLine($"Valid {_check.Valid}"); // true Console.WriteLine($"InValid {_check.InValid}"); // false _test1 = _test2 = _test3 = false; Console.WriteLine($"Valid {_check.Valid}"); // false Console.WriteLine($"InValid {_check.InValid}"); // true } }