我知道通常在C#中您无法创建抽象类或接口的实例。有人可以帮助我理解此代码(它编译没有任何错误)。

Shell32.Shell shObj = new Shell32.Shell();


Shell32.Shell是'shell32.dll'的接口

我尝试了以下操作,但未编译:

[CoClass(typeof(ShellClass))]
[Guid("286E6F1B-7113-4355-9562-96B7E9D64C54")]
public interface OtherShell : Shell
{
}
OtherShell shObj = new OtherShell();




更新:

为了使其工作,我只需要添加ComImport属性并更改共同类(我不能选择Shell32.ShellClass)。

多谢你们!

最佳答案

除了所有其他信息,以下是它如何生成编译代码。接口的用法仅是代码方面的优点。

IL_000c: newobj       instance void [Interop.Shell32]Shell32.ShellClass::.ctor()


也就是说,它是基于[CoClass]属性从接口“到”类的编译时转换。

Per https://stackoverflow.com/a/1094140/2864740,显示了一个最小的示例情况:


  [除了CoClassAttribute,您还需要ComImportAttribute和GuidAttribute才能起作用。

08-17 10:45