zoukankan      html  css  js  c++  java
  • C#中,接口不能被实例化,但存在特例

    看一个例子:

    1 interface IFoo
    2 {
    3     string Message { get; }
    4 }

    则,

    1 IFoo obj = new IFoo("abd");

    将会报错:接口不能被实例化。

    如果:

     1 class Foo : IFoo
     2 {
     3     readonly string name;
     4     public Foo(string name)
     5     {
     6         this.name = name;
     7     }
     8     string IFoo.Message
     9     {
    10         get
    11         {
    12             return "Hello from " + name;
    13         }
    14     }
    15 }

    1 IFoo obj = new Foo("abd");

    就不会有问题。

    MSDN中提到:

    • An interface can't be instantiated directly. Its members are implemented by any class or struct that implements the interface.

    • 接口不能被直接实例化。它的成员通过实现该接口的任何类或者结构来实现。

    存在的一个例外就是,该接口如果是一个COM 接口,则可以被实例化,看这篇博文Who says you can’t instantiate an interface?

     1 class Program
     2 {
     3     static void Main(string[] args)
     4     {
     5         IFoo obj = new IFoo("abd");
     6     }
     7 }
     8 
     9 // these attributes make it work
    10 // (the guid is purely random)
    11 [ComImport, CoClass(typeof(Foo))]
    12 [Guid("d60908eb-fd5a-4d3c-9392-8646fcd1edce")]
    13 interface IFoo
    14 {
    15     string Message { get; }
    16 }
    17 
    18 class Foo : IFoo
    19 {
    20     readonly string name;
    21     public Foo(string name)
    22     {
    23         this.name = name;
    24     }
    25     string IFoo.Message
    26     {
    27         get
    28         {
    29             return "Hello from " + name;
    30         }
    31     }
    32 }
  • 相关阅读:
    一些面试题(2)
    poj1102 7段数码管
    一些面试题(3)
    poj百练2737大整数除法
    枚举
    poj2244 约瑟夫环
    [Craftor原创]精通ModelSim脚本(1)
    [Craftor原创]带FIFO的UART收发器设计
    继电器的一些基本术语
    Every success is a creation for me
  • 原文地址:https://www.cnblogs.com/submarinex/p/3214756.html
Copyright © 2011-2022 走看看