Я был удивлен, увидев сегодня это также относится к методам расширения, расширяющим 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
Мобильная версия