Можно ли (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), чтобы этого избежать?