Ошибка компилятора C# или обычная странность COM?C#

Место общения программистов C#
Ответить
Anonymous
 Ошибка компилятора C# или обычная странность COM?

Сообщение Anonymous »

C# 4, чтобы упростить взаимодействие COM, позволяет вызывающим COM-интерфейсам опускать ключевое слово ref перед аргументами для параметров by ref.

Я был удивлен, увидев сегодня это также относится к методам расширения, расширяющим COM-интерфейсы. См. следующий код компиляции:

Код: Выделить всё

using System;
using System.Runtime.InteropServices;

[ComImport, Guid ("cb4ac859-0589-483e-934d-b27845d5fe74")]
interface IFoo {
}

static class Program {

public static void Bar (this IFoo self, ref Guid id)
{
id = Guid.NewGuid ();
}

static void Main ()
{
Foo (null);
}

static void Foo (IFoo o)
{
Guid g = Guid.NewGuid ();
Console.WriteLine (g);

// note that g is passed as is, and not as ref g
o.Bar (g);

Console.WriteLine (g);
}
}
Я не нашел в спецификации ничего, объясняющего такое поведение.

Мне кажется, что такой код за пределами COM-интерфейса, даже если это метод расширения, расширяющий COM-интерфейс, он должен следовать обычным правилам C# и обеспечивать использование ключевого слова ref. Поэтому я сообщил об ошибке при подключении. Не то чтобы я думал, что это будет исправлено, даже если это будет считаться ошибкой, уже есть код, использующий это.

Ошибка? Это не ошибка?

Подробнее здесь: https://stackoverflow.com/questions/893 ... com-oddity
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»