Влияет ли указание OutAttribute на внутренние методы ByRef в настоящее время? - PullRequest
9 голосов
/ 19 июля 2011

VB.NET не имеет параметров out, но вы можете указать <Out()> ByRef для методов COM и P / Invoke, чтобы получить тот же эффект для внешних методов.

Помогает ли указание одного и того же для внутренних методов (то есть методов, вызываемых только кодом .NET) на самом деле Jitter (или компилятор VB.NET)? Или это в настоящее время полезно только как примечание для программиста.

Возможно ли его использовать в будущем Jitter, или этот атрибут потерян при компиляции?

Ответы [ 2 ]

9 голосов
/ 20 июля 2011

Я подтвердил, что VB.NET <Out()> заставляет клиента C # требовать out аргументов, так что, похоже, он фактически одинаков.

Также клиент C # передает свои аргументы с текущими значениями в метод, но это не удивительно, потому что, в отличие от случаев COM или P / Invoke, нет необходимости выполнять маршалинг. (А C # не позволяет напрямую устанавливать свойство с помощью аргумента out, поэтому, похоже, нет способа узнать, оптимизирует ли C # предыдущее ненужное назначение.)

Так что, похоже, ответ заключается в том, что это поможет возможным будущим клиентам C # использовать код, и если джиттер когда-либо настроит эквивалент C #, он будет делать то же самое и здесь. Хотя такие языки, как VB, существуют, они мало что могут сделать, потому что они сами не уважают атрибут Out .

1 голос
/ 10 марта 2014

Я вложил в подкласс MembershipProvider с классом VB, мы назовем его A, а затем в подкласс A с классом C #, который мы назовем B. Код C #, B, не распознавал тот факт, что абстрактные методы в MembershipProvider уже был реализован в подклассе VB A, пока я не применил OutAttribute в классе VB для параметров, которые были определены как out в абстрактных методах базового класса MembershipProvider. Это влияет не только на COM или P / Invoke.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...