В общем, методы расширения C # прекрасно работают в VB.Net и наоборот. Единственным исключением является случай, когда параметр this
явно введен в Object
. По унаследованным причинам VB.Net не поддерживает использование методов расширения для ссылок, набираемых на Object
.
Причина, по которой это возможно, может заставить код молча перекомпилироваться с другой семантикой. VB.Net (и C #) придерживается позиции, что импорт пространства имен, содержащего методы расширения, не должен вызывать автоматическое повторное связывание существующего кода с методом расширения. Если VB.Net разрешает методы расширения для Object
, то для вызовов с поздним связыванием будет возможно молча повторно выполнить привязку к методу расширения и, следовательно, изменить код.
Например. Рассмотрим следующее, написанное перед вашим методом расширения.
Dim local As Object = ...
local.GetProps() ' This is a late bound call
Если бы VB.Net позволял определять метод расширения GetProps
для Object
, тогда простой импорт вашего пространства имен изменит значение GetProps
с позднего связывания на вызов метода расширения.