2011-02-09 12 views
9

私はCOMやコクラスに関してはあまり知られていません。だから、new演算子をインターフェイスで使うことができない理由はよくわかりません。これは、コンパイルし、正常に動作しますなぜ言語/フレームワークに依存しないから見ると、それは紛らわしいです:Visual Studioの2010年にApplicationの検査COMインターフェイスの新しいインスタンスを作成するのはなぜですか?

using Microsoft.Office.Interop.Excel; 

public class ExcelProgram 
{ 
    static void Main(string[] args) 
    { 
     Application excel = new Application(); 
    } 
} 

は私を示しています

using System.Runtime.InteropServices; 

namespace Microsoft.Office.Interop.Excel 
{ 
    // Summary: 
    //  Represents the entire Microsoft Excel application. 
    [Guid("000208D5-0000-0000-C000-000000000046")] 
    [CoClass(typeof(ApplicationClass))] 
    public interface Application : _Application, AppEvents_Event 
    { 
    } 
} 

舞台裏で何が起こっていますか?

答えて

5

これはCOMインターフェイスでのみ可能です。 Marc Gravellの説明はhereです。

簡単な答えは、COMインターフェイスを「デフォルト」実装クラスとペアにすることができるため、インターフェイスを「インスタンス化する」ときに実際にその既定の実装クラスのインスタンスを作成することです。あなたの例でApplicationインターフェイスの場合は、ApplicationClassと表示されます。

+0

ありがとうございました。このリンクには、http://stackoverflow.com/questions/1093536/how-does-the-c-compiler-detect-com-typesへのリンクがあります。私は間違ったキーワードを探していたと思う - 私の質問は本質的に重複しているように見える。 – ide

関連する問題