? Вопрос, с которым я связан с некоторым примером кода, не вызывает никаких конструкторов. RIAA не принесет никакой пользы.

отладки особенно сложной проблемы в VB.NET, связанной с порядком инициализации переменных экземпляра, я обнаружил, что существует серьезное несоответствие между поведением, которое я ожидал от C #, и фактическим поведением в VB.NET.

Примечание: Этот вопрос касается небольшого расхождения в поведении VB.NET и C #. Если вы фанат языка, который не может дать ответ, кроме«Вот почему вы должны использовать C #, нуб»здесь вам нечего видеть; любезно двигаться вперед.

В частности, я ожидал, что поведениеСпецификация языка C # (выделение добавлено):

Когда конструктор экземпляра не имеет инициализатора конструктора или имеет инициализатор конструктора в формеbase(...)этот конструктор неявно выполняет инициализации, указанные переменными-инициализаторами полей экземпляра, объявленных в его классе.Это соответствует последовательности присваиваний, которые выполняются сразу после входа в конструктор и до неявного вызова конструктора прямого базового класса. Инициализаторы переменных выполняются в текстовом порядке, в котором они появляются в объявлении класса.

Сравните это с частью Спецификации языка VB.NET, касающейсяКонструкторы экземпляров, который говорит (выделение добавлено):

Когда первое утверждение конструктора имеет видMyBase.New(...)конструктор неявно выполняет инициализации, указанные инициализаторами переменных переменных экземпляра, объявленных в типе.Это соответствует последовательности назначений, которые выполняются сразу после вызова прямого конструктора базового типа. Такое упорядочение гарантирует, что все базовые переменные экземпляра инициализируются их инициализаторами переменных до выполнения любых операторов, имеющих доступ к экземпляру.

Расхождение здесь сразу очевидно. C # инициализирует переменные уровня классадо вызов базового конструктора. VB.NET делает именно наоборот, по-видимому, предпочитая вызывать базовый конструктордо установка значений полей экземпляра.

Если вы хотите увидеть код,этот связанный вопрос предоставляет более конкретный пример расходящегося поведения. К сожалению, он не дает никаких подсказок относительно того, как можно заставить VB.NET следовать модели, установленной C #.

Меня меньше интересует, почему разработчики двух языков выбрали такие расходящиеся подходы, чем я в возможных обходных путях решения проблемы. В конечном счете, мой вопрос заключается в следующем:Есть ли способ, которым я могу написать или структурировать свой код в VB.NET, чтобы заставить инициализировать переменные экземплярадо конструктор базового типа называетсякак стандартное поведение в C #?

Ответы на вопрос(2)

Ваш ответ на вопрос