일부 조건이 충족 될 때만 매개 변수의 후행 필드 설정을 연기 할 수있는 메커니즘을 찾고 있습니다. 람다 식에서 ref
매개 변수를 사용해야하기 때문에 걸쇠가 튀어 나올 때까지 디자인을 생각했습니다. 람다에 ref 매개 변수를 넣지 않아도이 작업을 수행 할 수 있습니까? 내가 생각할 수있는나중에 속성 값을 설정하는 방법
protected bool isRunning = false;
List<Action> argumentSetters = new List<Action>();
// the reason for the delegate and following subroutine
// is to define an action which takes a ref parameter
protected delegate void setArgByRef<T>(ref T arg, T value);
protected void setArgByRefSub<T>(ref T arg, T value)
{
arg = value;
}
protected int _setPoint;
public int SetPoint
{
get { return _setPoint; }
set { setValue(ref _setPoint, value); }
}
public void Run()
{
isRunning = true;
// time consuming code here
// don't want SetPoint to be allowed to change
// while isRunning == true
isRunning = false;
// set SetPoint and other properties after
argumentSetters.ForEach((a) => a.Invoke());
}
protected void setValue<T>(ref T arg, T value)
{
setArgByRef<T> a = new setArgByRef<T>(setArgByRefSub<T>);
if (isRunning)
// cannot use ref parameter inside a lambda
{ argumentSetters.Add(() => a.Invoke(ref arg, value)); }
else
{ arg = value; }
}
'() => _setPoint = value' 액션 람다를 사용할 수 있습니까? –
안에는 setValue()가 없기 때문에 _setPoint에만 해당되며 setValue를 사용하려는 이유는 추상 클래스이므로 속성을 최소한으로 유지하려는 것입니다. SetPoint는 단지 예일 뿐이므로 동일한 방식으로 처리해야하는 파생 클래스에 더 많은 소품이 정의됩니다. – djv