接口不能实例化?还是什么?

不懂必须要问 2009-01-31 01:23:52
关键字abstract和sealed不能在接口中使用,因为这两个修饰符在接口定义中是没有意义的(它们不包含执行代码,所以不能直接实例化,且必须是可以继承的)。
接口不是类,所以没有继承System.Object。但是为了方便,System.Object的成员可以通过接口类型的变量来访问。
如上所述,不能用实例化类的方式来实例化接口。
...全文
682 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
随枫而来 2011-08-17
  • 打赏
  • 举报
回复
顶起来!!!
tianjinldl 2009-02-01
  • 打赏
  • 举报
回复
UP
ProjectDD 2009-01-31
  • 打赏
  • 举报
回复
接口引用实例
不懂必须要问 2009-01-31
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 pp_shy 的回复:]
引用 2 楼 MoreQuestion 的回复:
什么意思呢?

1namespace ConsoleApplication1
2{
3 class Program
4 {
5 static void Main(string[] args)
6 {
7 USB usb;
8 usb = new UDisk();//插入U盘
9 usb.OutputFile();//从U盘读出文件
10 usb.InputFile();//往U盘写入文件
11 usb.Dispose();//拔出U盘
12 Console.…
[/Quote]

多谢,原来这样的啊。
HDNGO 2009-01-31
  • 打赏
  • 举报
回复
接口因为没有实现代码,所以不能实例化。

如果要使用一个接口的话,必须用一个类来实现这个接口,然后实例化这个类。

你例子中的UDisk什么的就是具体的类,USB是接口~~

USB usb = new UDisk(); 实例化UDisk类来实现USB接口~~

不懂必须要问 2009-01-31
  • 打赏
  • 举报
回复
是啊,这样只是声明?还是定义?不是实例化。
不懂必须要问 2009-01-31
  • 打赏
  • 举报
回复
abstract class A
{
}

A a;

这样可以吧?因为我不是实例化吧?
不懂必须要问 2009-01-31
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 king19840811 的回复:]
可是这里USB 接口实例化了。USB usb;

你先搞清什么是实例化吧。。。

USB usb=new USB();这才是实例化
[/Quote]

啊,这样才是实例化啊?

可惜没说要new才算实例货啊。

pp_shy 2009-01-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 MoreQuestion 的回复:]
什么意思呢?

1namespace ConsoleApplication1
2{
3 class Program
4 {
5 static void Main(string[] args)
6 {
7 USB usb;
8 usb = new UDisk();//插入U盘
9 usb.OutputFile();//从U盘读出文件
10 usb.InputFile();//往U盘写入文件
11 usb.Dispose();//拔出U盘
12 Console.WriteLine("");
13 u…
[/Quote]

这里进行实例化的只有UDisk、MDisk、MP4这3个类而已

USB usb = new UDisk();//插入U盘
上面的这行代码其实是先实例化了一个UDisk的类,然后再把UDisk类的实例隐式转换成USB接口的一个对象usb
(因为UDisk类派生自USB接口,所以可以隐式转换)

USB usb = new UDisk();这行代码等同于下面的形式
UDisk uDisk = new UDisk();
USB usb = uDisk;

同理:
USB usb = new MDisk();//插入移动硬盘
USB usb = new MP4();//插入MP4
king19840811 2009-01-31
  • 打赏
  • 举报
回复
可是这里USB 接口实例化了。USB usb;

你先搞清什么是实例化吧。。。

USB usb=new USB();这才是实例化
Deathsign 2009-01-31
  • 打赏
  • 举报
回复
接口不能直接实例化
但是接口派生出来的抽象类可以实例化
同时 所有派生出来的抽象类都可以强制转换成接口的实例……
猿敲月下码 2009-01-31
  • 打赏
  • 举报
回复
你可以把接口看成一个纯粹的抽象类。抽象类是不能创建对象的
wuyq11 2009-01-31
  • 打赏
  • 举报
回复
是的。不能实例化。
不懂必须要问 2009-01-31
  • 打赏
  • 举报
回复
什么意思呢?

1namespace ConsoleApplication1
2{
3 class Program
4 {
5 static void Main(string[] args)
6 {
7 USB usb;
8 usb = new UDisk();//插入U盘
9 usb.OutputFile();//从U盘读出文件
10 usb.InputFile();//往U盘写入文件
11 usb.Dispose();//拔出U盘
12 Console.WriteLine("");
13 usb = new MDisk();//插入移动硬盘
14 usb.OutputFile();//从移动硬盘读出文件
15 usb.InputFile();//往移动硬盘写入文件
16 usb.Dispose();//拔出移动硬盘
17 Console.WriteLine("");
18 usb = new MP4();//插入MP4
19 usb.OutputFile();//从MP4读出文件
20 usb.InputFile();//往MP4写入文件
21 usb.Dispose();//拔出MP4
22 Console.ReadKey();
23 }
24
25 //USB接口
26 public interface USB : IDisposable
27 {
28 void OutputFile();//读出文件
29 void InputFile();//写入文件
30 }
31
32 //U盘
33 public class UDisk : USB
34 {
35 public UDisk()
36 {
37 Console.WriteLine("U盘准备就绪");
38 }
39 public void OutputFile()
40 {
41 Console.WriteLine("从U盘读出文件");
42 }
43 public void InputFile()
44 {
45 Console.WriteLine("往U盘写入文件");
46 }
47 public void Dispose()
48 {
49 Console.WriteLine("U盘已被拔出");
50 }
51 }
52
53 //移动硬盘
54 public class MDisk : USB
55 {
56 public MDisk()
57 {
58 Console.WriteLine("移动硬盘准备就绪");
59 }
60 public void OutputFile()
61 {
62 Console.WriteLine("从移动硬盘读出文件");
63 }
64 public void InputFile()
65 {
66 Console.WriteLine("往移动硬盘写入文件");
67 }
68 public void Dispose()
69 {
70 Console.WriteLine("移动硬盘已被拔出");
71 }
72 }
73
74 //MP4
75 public class MP4 : USB
76 {
77 public MP4()
78 {
79 Console.WriteLine("MP4准备就绪");
80 }
81 public void OutputFile()
82 {
83 Console.WriteLine("从MP4读出文件");
84 }
85 public void InputFile()
86 {
87 Console.WriteLine("往MP4写入文件");
88 }
89 public void Dispose()
90 {
91 Console.WriteLine("MP4已被拔出");
92 }
93 }
94 }
95}

可是这里USB 接口实例化了。USB usb;
king19840811 2009-01-31
  • 打赏
  • 举报
回复
都被你说完了

接口是一组方法的原型不能实例化。

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧