Мне интересно, что нужно сделать, чтобы сделать что-то вроде этой работы:
using System;
class Program
{
static void Main()
{
var f = new IFoo {
Foo = "foo",
Print = () => Console.WriteLine(Foo)
};
}
}
interface IFoo
{
String Foo { get; set; }
void Print();
}
Созданный анонимный тип будет выглядеть примерно так:
internal sealed class <>f__AnonymousType0<<Foo>j__TPar> : IFoo
{
readonly <Foo>j__TPar <Foo>i__Field;
public <>f__AnonymousType0(<Foo>j__TPar Foo)
{
this.<Foo>i__Field = Foo;
}
public <Foo>j__TPar Foo
{
get { return this.<Foo>i__Field; }
}
public void Print()
{
Console.WriteLine(this.Foo);
}
}
Есть ли причина, по которой компилятор не сможет сделать что-то подобное? Даже для непустых методов или методов, которые принимают параметры, компилятор должен иметь возможность выводить типы из декларации интерфейса.
Отказ от ответственности: Пока я понимаю, что в настоящее время это невозможно, и было бы разумнее просто создать конкретный класс в этом случае. Меня больше интересуют теоретические аспекты этого.