Наиболее близкой конструкцией к тому, что вы мне предложили, будет метод, который принимает объект и Func
или Action
в качестве аргумента, и если объект имеет определенный тип - например, реализует интерфейс, затем выполняетtask.
Давайте начнем с интерфейса:
public interface IMyWrapper
{
void Do();
}
Для простоты я создал один пример для Action, который не принимает никаких аргументов:
public class MyWrapper
{
public static void MyWrapperMethod(IMyWrapper wrapped, Action doStuff)
{
try
{
doStuff();
}
finally
{
wrapped.Do();
}
}
public static void MyWrapperMethod(object notWrapped, Action doStuff)
{
doStuff();
}
}
IFВы передаете объект, который реализует интерфейс IMyWrapper
, он будет запускать метод Do()
интерфейса IMyWrapper
после выполнения действия, указанного в действии doStuff
.В противном случае он просто запустит doStuff
.
, чтобы запустить его так:
MyWrapper.MyWrapperMethod(new object(), () =>
{
Console.WriteLine("Do stuff");
});
Это будет писать только «Делать вещи».
Давайте сейчассоздайте класс, который влияет на интерфейс:
public class MyWrappedClass : IMyWrapper
{
public void Do()
{
Console.WriteLine("I implement the wrapper.");
}
}
и используйте его в MyWrapperMethod
:
var myWrappedClass = new MyWrappedClass();
MyWrapper.MyWrapperMethod(myWrappedClass, () =>
{
Console.WriteLine("Do stuff");
});
Это будет печатать «Делать вещи» и «Я реализую оболочку».Это б / к, MyWrapperMethod
выполнит для нас метод Do
.
Это самое близкое к тому, что using
я мог придумать.