2011-02-09 40 views
9

Tôi không có nhiều thông tin cơ bản về COM cũng như kén, vì vậy tôi không hiểu tại sao tôi có thể sử dụng toán tử new với giao diện. Từ một ngôn ngữ/xem khung-agnostic, nó khó hiểu tại sao điều này biên dịch và chạy một cách chính xác:Tại sao có thể tạo một thể hiện mới của giao diện COM?

using Microsoft.Office.Interop.Excel; 

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

Kiểm tra Application trong Visual Studio 2010 cho thấy tôi:

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 
    { 
    } 
} 

gì đang xảy ra đằng sau hậu trường?

Trả lời

5

Điều này chỉ có thể cho giao diện COM, tôi tin. Marc Gravell có một lời giải thích here.

Câu trả lời ngắn gọn là giao diện COM có thể được ghép nối với lớp triển khai "mặc định", để khi bạn "khởi tạo" giao diện bạn đang thực sự tạo một thể hiện của lớp triển khai mặc định đó. Trong trường hợp của giao diện Application trong ví dụ của bạn, có vẻ như là ApplicationClass.

+0

Cảm ơn. Liên kết đó có liên kết đến liên kết đến http://stackoverflow.com/questions/1093536/how-does-the-c-compiler-detect-com-types. Đoán tôi đã tìm kiếm từ khóa sai - có vẻ như câu hỏi của tôi về bản chất là một bản sao. – ide

Các vấn đề liên quan