【发布时间】:2012-02-17 11:53:45
【问题描述】:
有时我会有一些 WPF C# 代码,我想以“流利”的方式编写。
例如,我可能想设置一个包含ScrollViewer 的Window:
new Window()
.SetContent(
new ScrollViewer()
.SetContent(
...))
为了实现这种 API,我一直在使用以下扩展方法:
static class FluentScrollViewer
{
public static ScrollViewer SetContent(this ScrollViewer obj, object val)
{ obj.Content = val; return obj; }
}
static class FluentWindow
{
public static Window SetContent(this Window obj, object val)
{ obj.Content = val; return obj; }
}
现在,Window 和 ScrollViewer 都从 ContentControl 继承了 Content 属性。然而,我不得不为每个类分别定义 SetContent 扩展方法。
如果我尝试这样做:
static class FluentContentControl
{
public static ContentControl SetContent(this ContentControl obj, object val)
{ obj.Content = val; return obj; }
}
然后像这样使用它:
new Window().SetContent(...)
SetContent 方法当然不会返回 Window。
有没有办法在 ContentControl 之上定义 SetContent 并让它做“正确的事情”以避免定义许多除了类型之外相似的单独的专门方法?
【问题讨论】:
标签: c# wpf fluent fluent-interface