У меня был именно этот вопрос, поэтому я нашел этот пост два года спустя.Тем не менее, я думаю, важно отметить, что это только не скомпилирует и выдаст ошибку « Вызов неоднозначный » , если код, вызывающий дублирующие методы расширения, не находится в том же пространстве имен, что ииз них .
Если ОП должен был изменить пространство имен своего класса Бла на test1
или test2
, то код компилируется, а расширение виспользуется то же пространство имен, что и для вызывающего абонента - даже когда оба пространства имен представлены в usings
.Поэтому, если Blah находится в пространстве имен test1
, возвращается «1», а если Blah находится в пространстве имен test2
, возвращается «2».
Я думаю, что это важно добавить к вышеприведенным ответам, потому что я думаю, что одним из основных сценариев использования является наличие расширений в локальной библиотеке классов, которая ссылается на внешние библиотеки расширений (например, у разработчиков есть общая библиотека утилит, но есть некоторые локальные пользовательские настройки).расширения, которые могут неумышленно иметь одно и то же имя).Поддерживая пользовательские локальные расширения в том же пространстве имен, что и код, который их использует, вы можете поддерживать синтаксис вызова расширения и не возвращаться к его обработке как статическим вызовам методов.