В Scala я могу определить структурные типы следующим образом:
type Pressable = { def press(): Unit }
Это означает, что я могу определить функцию или метод, который принимает в качестве аргумента что-то вроде Pressable, например:
def foo(i: Pressable) { // etc.
Объект, который я передаю этой функции, должен определить для него метод с именем press(), который соответствует сигнатуре типа, определенной в типе, - не принимает аргументов, возвращает Unit (Scala версия void).
Я даже могу использовать структурный тип inline:
def foo(i: { def press(): Unit }) { // etc.
В основном это позволяет программисту получить все преимущества печати утинов, сохраняя при этом возможность проверки типа компиляции.
Есть ли у С# что-то подобное? Я Googled, но ничего не могу найти, но я не знаком с С# на любой глубине. Если нет, планируете ли вы добавить это?