Можно ли (ab) использовать CoClassAttribute, чтобы обеспечить реализацию по умолчанию для интерфейса?

Я недавно обнаружил, что это возможно«новый» интерфейс в C # украшая интерфейсCoClassAttribute указать реализацию по умолчанию.

[ComImport, Guid("579A4F68-4E51-479A-A7AA-A4DDC4031F3F"), CoClass(typeof(FooImpl))]
public interface IFoo
{
    void Bar();
}

public class FooImpl : IFoo
{
    public void Bar() { }
}

...

// Constructs a FooImpl
IFoo foo = new IFoo();

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

У меня есть два вопроса:

Есть ли какие-нибудь ошибки с этим? Я не эксперт по COM-взаимодействию, и я не знаю, окажет ли это какое-либо негативное влияние на POCO. Я не проводил каких-либо серьезных тестов, но IL для моего примера кажется нормальным (нормальныйnewobj инструкция поFooImpl а не призывы кType.GetTypeFromCLSID а такжеActivator.CreateInstance).

Даже если это будет работать гладко, есть ли другие причины (скажем, с точки зрения разработки API), чтобы этого избежать?

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

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