Да, это серьезное изменение.Каждый раз, когда вы делаете недействительное преобразование легальным, это является серьезным изменением.
К сожалению, очень сложно добавлять функции в язык без внесения каких-либо критических изменений.В C # 4 есть еще несколько событий вокруг, если вы действительно хотите их искать.Конечно, вряд ли это повлияет на большинство разработчиков.
Были похожие изменения между C # 1 и C # 2, где используемая реализация изменилась бы между различными версиями для этого кода:
using System;
public delegate void StringAction(string x);
public class Base
{
public void Foo(string x)
{
Console.WriteLine("Base");
}
}
public class Child : Base
{
public void Foo(object x)
{
Console.WriteLine("Child");
}
}
public class Test
{
static void Main()
{
Child c = new Child();
StringAction action = new StringAction(c.Foo);
action("x");
}
}
В этом случае компилятор фактически выдает предупреждение:
Test.cs(26,31): warning CS1707: Delegate 'StringAction' bound to
'Child.Foo(object)' instead of 'Base.Foo(string)' because of new
language rules