我知道通常在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才能起作用。