2016-03-21 22 views
0

いいえ、C#インターフェイスは初めてです。私の理解から、インターフェースにはクラスが実装し使用できるメソッドプロトタイプが含まれています。たとえば:C#定義コードのないインターフェイスからメソッドを呼び出す

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

私の目標は、特定のディレクトリで右クリック動詞を呼び出すことです。しかし、私が見ているところでは、インターフェイスは実装を必要とします。は、単に「メソッドを呼び出す」ことはできません。このメソッドは定義されていません。

どうすればいいですか?

+3

あなたの 'MyExampleClass'は、インターフェイス' MyInterface'を実装していません。あなたのクラスは 'class MyExampleClass:MyInterface'として定義される必要があります。 –

+0

さらに、インターフェイスの可視性は暗黙的に' internal'ですが、実装の可視性は 'public'です。 – Codor

+0

@Codorインターフェイス実装の例としてコードを書いています。私は急いで質問を掲示した。 – DDPWNAGE

答えて

1

COMインターフェイスは、通常のC#タイプとは異なる働きをします。 COMインスタンスをインターフェイスにキャストすると、QueryInterfaceが呼び出されます。これはCLRの魔法です。

これは、静的には動作しないCOMタイプに対してインターフェイスキャストを機能させる理由です。また、通常失敗しないキャストは失敗する可能性があります。

シェルCOM APIの経験はありませんが、理論的には(MyInterface)(new MyExampleClass())はすべてのタイプがCOMタイプであれば動作します。

+1

COMインターフェースに 'new MyInterface()'を使うこともできます。 COMインターフェイスを「新しく」することができるばかげたコンパイラマジック。 – vcsjones

関連する問題