http://www.cnblogs.com/submarine/archive/2013/07/25/3214756.html
看一个例子:
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 }