1

我想封装委托方法,稍后会调用。此委托方法在调用时将在该时间实例计算一些参数并将值分配/返回给类外部的变量。

例如,我有一个类 Tool

当调用委托方法时,这个工具应该生成,比如说点......

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 很容易完成。但是,我必须跟踪许多论点,所以我必须把它变成一个类。另一件事是,这个调用发生在类内部,所以我不能从类中返回计算值。尽管我可以更改设计以便从类外部更新更新方法,但我希望让类管理自己的更新例程。我知道应该有更好的方法,所以如果有的话,请告诉我。

4

2 回答 2

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
}

}

之后,您总是使用 Point fromOutPointContainer.OutPoint

于 2012-06-10T15:11:57.620 回答
0

由于 Point 是一个类,您可以随时更改它的值,而不是完整的参考:

public Tool(OutPointContainer outPointContainer)
{
    Select = () => outPoint.UpdateWith(position);
}

UpdateWith 方法将执行以下操作:

public void UpdateWith(Point other){
    this.X = other.X;
    this.Y = other.Y;
}
于 2012-06-10T15:14:18.243 回答