看一個例子:html
1 interface IFoo 2 { 3 string Message { get; } 4 }
則,dom
1 IFoo obj = new IFoo("abd");
將會報錯:接口不能被實例化。ui
若是:this
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 }
則spa
1 IFoo obj = new Foo("abd");
就不會有問題。code
MSDN中提到:htm
An interface can't be instantiated directly. Its members are implemented by any class or struct that implements the interface.blog
存在的一個例外就是,該接口若是是一個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 }