У меня было обсуждение в другом потоке, и выяснилось, что методы класса имеют приоритет над методами расширения с одинаковыми именами и параметрами. Это хорошо, поскольку методы расширения не будут использовать методы захвата, но предположим, что вы добавили некоторые методы расширения в стороннюю библиотеку:
public class ThirdParty
{
}
public static class ThirdPartyExtensions
{
public static void MyMethod(this ThirdParty test)
{
Console.WriteLine("My extension method");
}
}
Работает как ожидалось: ThirdParty.MyMethod → "Мой метод расширения"
Но затем ThirdParty обновляет его и добавляет метод точно так же, как ваш метод расширения:
public class ThirdParty
{
public void MyMethod()
{
Console.WriteLine("Third party method");
}
}
public static class ThirdPartyExtensions
{
public static void MyMethod(this ThirdParty test)
{
Console.WriteLine("My extension method");
}
}
ThirdPart.MyMethod → "Сторонний метод"
Теперь внезапный код будет вести себя по-разному во время выполнения, так как сторонний метод "захватил" ваш метод расширения! Компилятор не дает никаких предупреждений.
Есть ли способ включить такие предупреждения или избежать этого?