using
- это языковая функция, специфичная для IDisposable
. Он не может быть расширен непосредственно для другой семантики. В основном вы пытаетесь добавить новую функцию в язык, что невозможно.
Лучшим вариантом, как правило, является предоставление действия, в идеале в общем методе с ограничением new()
.
public static void Dialog<T>(Action<T> action) where T: IDialog, new()
{
var d = new T();
try
{
action(d);
}
finally
{
var idialog = d as IDialog;
if (idialog != null)
{
idialog.Dispose(); // Or whatever IDialog method(s) you want
}
}
}
Вы можете сделать:
Dialog(d => d.DoSomethingToAVisibleDialogThatAppearedInTheDialog());