浅谈如何使用Lambda表达式做抽象代表
2009-04-30 08:27:33 来源:WEB开发网你想要一个能检查是否需要整理编排的单一方法。如果需要,则方法会编排好调用,否则,会调用由代表指定的方法。你虚伪方法作为System.Windows.Controls.Control 类型的成员出现。这样使得你可以将代码作为控件的一部分来使用。C#3.0就为你提供了这样做的方法:扩展方法。你需要编写一些方法的不同超载,这些使得你可以通过不同的参数来使用它们:
public static class WPFExtensions:
{
public static voidInvokeIfNeeded(
this Control widget,
Action whatToDo)
{
if (!widget.Dispatcher.
CheckAccess())
widget.Dispatcher.Invoke(whatToDo);
else
whatToDo();
}
public static void
InvokeIfNeeded
this Controlwidget, Action
whatToDo, T parm)
{
if (!widget.Dispatcher.CheckAccess())
widget.Dispatcher.Invoke(whatToDo, parm);
else
whatToDo(parm);
}
public static void
InvokeIfNeeded(this
Controlwidget, Action
whatToDo,
T1 parm1, T2 parm2)
{
if (!widget.Dispatcher.
CheckAccess())
widget.Dispatcher.
Invoke(whatToDo,
parm1, parm2);
else
whatToDo(parm1, parm2);
}
}
当然,我们也可以通过添加更多参数的方式来添加更多超载以扩展这个类。这其实是一个简单的扩展。
有一种方法让WPF设计师们疯狂:他们希望用最小化应用程序接口的面积部分来简化Dispatcher对象的使用。通过使用抽象代表和参数列表中的参数,这一对象的使用范围被扩大了。任何带有参数的方法都可以被拿来使用。但是,这样做有一个不足之处。该应用程序接口更为抽象,它会破坏所有类型的安全性,而且这样做会损坏编译器使用类型推理的能力,从而降低工作效率。需要做的应该是添加自己的安全扩展方法的层类型,这一层类型可以在类型安全调用和更为抽象的.NET库应用程序接口之间提供一个层。
更多精彩
赞助商链接