您的位置:首页 > 编程语言 > C#

C#中,接口不能被实例化,但存在特例

2013-11-21 09:53 218 查看
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 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: