Иногда у меня будет какой-нибудь код WPF C #, который я хотел бы написать «бегло».
Например, я мог бы захотеть настроить Window
, содержащий ScrollViewer
:
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
оба наследуют свойство Content
от ContentControl
. Тем не менее, мне пришлось определить SetContent
методы расширения для каждого класса отдельно.
Если я попытаюсь сделать что-то вроде этого:
static class FluentContentControl
{
public static ContentControl SetContent(this ContentControl obj, object val)
{ obj.Content = val; return obj; }
}
и затем используйте его так:
new Window().SetContent(...)
метод SetContent
, конечно, не возвращает Window
.
Есть ли способ определить SetContent
сверх ContentControl
и заставить его делать "правильные вещи", чтобы избежать определения множества индивидуально специализированных методов, которые похожи, кроме типа?