我想封装委托方法,稍后将调用它们。调用此委托方法时,将计算该时间实例的一些参数,并将该值赋给/返回类外的变量。
例如,我有一个类工具
当委托方法被调用时,这个工具应该生成,比如说Point ...
public delegate void Action();
class Tool
{
public Action Select;
public Action Cancel;
public Point position;
public Tool(ref Point outPoint) //Cannot use ref with lambda...
{
Select = () => outPoint = position;
}
public void Update(Point newPosition)
{
position = newPosition
}
public void UpdateKey(Keys k, bool IsPress)
{
//Invoke Select/Cancel when press some keys
}
}
我在这里要完成的是一个简单的函数,它应该接收我的输入并在调用Select后用正确的参数填充它。如果这是一个单一的方法,那么使用ref很容易完成。但是,我必须跟踪许多参数,所以我必须把它变成一个类。另一件事是,这个调用发生在类中,所以我无法从类中返回计算值。即使我可以更改设计以便从类外部更新更新方法,但我希望让类管理自己的更新例程。我知道应该有更好的方法,所以如果有的话,请告诉我。
答案 0 :(得分:1)
如果Point是一个结构,你需要一个包含OutPoint的类。
class OutPointContainer { //Please, think of a better name :)
public Point OutPoint{ get; set; }
}
class Tool
{
public Action Select;
public Action Cancel;
public Point position;
public Tool(OutPointContainer outPointContainer)
{
Select = () => outPoint.OutPoint = position;
}
public void Update(Point newPosition)
{
position = newPosition
}
public void UpdateKey(Keys k, bool IsPress)
{
//Invoke Select/Cancel when press some keys
}
}
稍后,您始终使用OutPointContainer.OutPoint
答案 1 :(得分:0)
由于Point是一个类,您可以随时更改它的值而不是完整的引用:
public Tool(OutPointContainer outPointContainer)
{
Select = () => outPoint.UpdateWith(position);
}
UpdateWith方法将执行以下操作:
public void UpdateWith(Point other){
this.X = other.X;
this.Y = other.Y;
}