好吧,所以我是C#Interfaces的新手。根据我的理解,接口包含类可以实现和使用的方法原型。例如:
interface MyInterface {
public void printhelloworld();
}
class MyExampleClass : MyInterface {
public void exampleMethod() {
printhelloworld();
}
public void printhelloworld() {
System.Console.WriteLine("Hello, world!");
}
}
但是,我遇到问题的界面在Shell32
。更具体地说,我正在尝试拨打ParseName
method of Folder
,并从那里调用InvokeVerb
method of FolderItem
。
根据我在课堂视图中看到的内容,Shell32
声明了:
Folder
FolderItem
ShellFolderItemClass
我的目标是在某些目录上调用右键单击动词。但是,从我所看到的,接口需要一个实现,这意味着我不能简单地“调用方法”。该方法未定义。
我将如何做到这一点?
答案 0 :(得分:1)
COM接口的工作方式与普通的C#类型不同。将COM实例强制转换为接口会调用QueryInterface
。这是CLR魔术。
这就是为什么你可以让界面强制转换工作在静态不应该工作的COM类型上。此外,强制转换可能会失败,通常不会失败。
我没有Shell COM API的经验,但理论上(MyInterface)(new MyExampleClass())
可以工作,如果涉及的所有类型都是COM类型。