Поскольку интерфейсы в C # не могут содержать определения операторов (или любых статических методов в этом отношении), я считаю, что ответом является no . Альтернативой является использование класса (к сожалению, не может быть абстрактным, поскольку статические члены / операторы здесь не лучше, чем в интерфейсах). Это позволит вам определить оператор преобразования implicit
и, следовательно, сможет использовать тип точно так, как вы указали.
В классе (который вы, возможно, могли бы сделать virtual
, если требуется), вы бы определили его примерно так:
public class MyClass<T>
{
public static implicit operator MyClass<T>(Func<T, T> func)
{
return new MyClass<T>() { MyFunction = func };
}
public MyClass()
{
}
public Func<T, T> MyFunction
{
get;
set;
}
}
Ваше определение TestFunction
в вашем вопросе должно работать точно так, как вы его закодировали.
public T TestFunction<T>(IMyInterface myInterface, T value)
{
return myInterface.MyFunction(value);
}
А также звонок на TestFunction
:
TestFunction<string>(x => return x + " world", "hello");
Возможно, это не совсем то, что вы ищете, но, тем не менее, оно достаточно близко, и, более того, скорее всего, лучшее, что вы сможете получить.