【发布时间】:2019-03-14 11:04:39
【问题描述】:
我知道在 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 属性并更改co-class(我不能选择Shell32.ShellClass)。
谢谢大家!
【问题讨论】:
-
它是一个 COM 对象。将 COM DLL 导入项目时会生成一个互操作程序集。其中还有一些其他的魔法——实际的类是“Shell32.ShellClass”。在“新 Shell”代码上使用代码导航将移动到 ShellClass 实现,而不是 Shell 接口,因此还有更多的魔力..
-
是什么让你觉得它是一个界面?
-
@BuhBuh 查看互操作程序集:“[Guid("286E6F1B-7113-4355-9562-96B7E9D64C54")] [CoClass(typeof (ShellClass))] [ComImport] public interface Shell ..”(ShellClass 扩展 Shell)。
-
简短回答:您是正确的,接口不能被实例化。您偶然发现了一些有助于 COM 类实例化的晦涩语法糖。
-
无需将问题标记为已解决 - 答案就是这样做的。您可以随时回答自己的问题。
标签: c# interface shell32.dll