Przypisz do inicjatora tablicy interfejsu kompiluje, ale dlaczego?
Dzisiaj myślałem, że dobrze byłoby stworzyć anonimowy obiekt, który jest typem jakiegoś interfejsu, i widziałem na SO, że nie jestem tylko jednym.
Zanim zacząłem sprawdzać, co się dzieje, napisałem kod podobny do poniższego. Ku mojemu zdziwieniu skompilowałem, korzystam z .net framework 4 i wiem, że nie ma sposobu na wykonanie interfejsu implementacji anonimowych obiektów, ale nie widziałem skargi z VS na ten kod.
Jeszcze lepiej, gdy umieszczę szelki intelisense, znajduję „własność” mojego interfejsu, tak jak byłby to prawidłowy kod.
Dlaczego kompilacja tego fragmentu i po uruchomieniu daje wyjątek zerowy?
namespace test
{
class Program
{
static void Main(string[] args)
{
Holder holder = new Holder { someInterface = { Property = 1 } };
Console.WriteLine(holder.someInterface.Property);
}
}
class Holder
{
public ISomeInterface someInterface{get; set;}
}
interface ISomeInterface
{
int Property { get; set; }
}
}