C#从类中的委托方法获取值---使用lambda运算符引用?

时间:2012-06-10 14:58:14

标签: c#

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

例如,我有一个类工具

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

2 个答案:

答案 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

中的Point

答案 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;
}