关于接口,我一直没明白,谁点拨下
public interface IMyInterace
{
void DoSomething();
}
class Program:IMyInterace
{
public void DoSomething()
{
Console.WriteLine( "111 ");
}
static void Main(string[] args)
{
Program t1 = new Program();
t1.DoSomething();
}
}
接口是那么用的吗?如果是的话,与以下代码有何区别:
class Program
{
public void DoSomething()
{
Console.WriteLine( "111 ");
}
static void Main(string[] args)
{
Program t1 = new Program();
t1.DoSomething();
}
}
[解决办法]
接口嘛,举个例子,你要用u盘时,难道自己在电脑做一个usb接口,当然时用上面自带的嘛
[解决办法]
转贴
1. Interface, "like a "关系; abstract class, "is a "关系
2. Interface是一种契约, abstract class是事物本质的抽象概括
由以上两点, 什么时候用Interface什么时候用abstract class有看你如何理解你的设计对象, 例如, 某一天你可能会要设计一个Door的类, 它有Open和Close两个功能, 于是
public interface Door
{
void Open();
void Close();
}
public abstract class Door
{
void Open(){};
void Close(){};
}
就目前来说, 你用Interface还是用abstract class基本上没什么区别, 两者都用来描述Door的行为, 只不过用Interface是在强调Door额外的有Open和Close这两个功能, 而用abstract class则是在强调Door自带有Open和Close的能力
走远一点, 假如又有一天, 你要写一个AlarmDoor的类, 这个时候...
public interface AlarmDoor
{
void open();
void close();
void alarm();
}
public abstract class AlarmDoor
{
void open(){};
void close(){};
void alarm(){};
}
现在, 你应该想清楚你究竟是想设计一个报警器还是想设计一扇门, 如果选择Interface, 那你是在想设计一个报警器, 如果选择abstract class, 那你是在想设计一扇门, 说到现在, 是否有点眉目了?
C#里面不允许多个父类, 但却允许多个接口, 接口无非是让某个类拥有某种行为, 而抽象类却是在让某个类拥有某种本质, 因此, 我们设计的类, 应该用一个抽象类把它的所有本质都抽象出来, 而它的一些行为(或者说是契约)则通过Interface来实现, 这也能说明为什么C#会不允许多层父类却允许多层接口
[解决办法]
你上面的代码是没有区别的!
最上面的应该改成
static void Main(string[] args)
{
IMyInterace t1 = new Program();
t1.DoSomething();
}
[解决办法]
以你的代码解释补了接口的妙处
[解决办法]
首先,你的题目中两个例子是没有区别的;
1 如果你不需要继承的话,永远都是单个类就可解决问题的话,你可以不需要使用接口.
2 为何需要接口? 接口定义了一种规范,这让你的整个程序框架可读性增强.比如说吧,让你写一个汽车的类和自行车的类,如果你不继承,你该如何写? 用接口的话,可以定义它们共同的属性(外观颜色),方法(Run),不同的部分可以在继承类中扩展实现.简而言之,是OOP的思想;
3 C#不支持多继承,但是可以继承自多个接口
其他,等楼下继续.
[解决办法]
用接口使程序更清晰
1.接口是为需编写的类提供一个蓝图。
2.接口只提供定义。
接口类似抽象方法,且为public
[解决办法]
接口方便后续添加,更新软件,还有很多
你可以自己特地去看一下接口的用处
这里说不了那么多
[解决办法]
只要理解成接口是对某些功能的提供就行。
IMyInterace t1 就是说t1提供IMyInterace接口所定义的功能。
至于t1 = new Program();就是说这个接口是由Program类来实现的。
比如一个函数定义
public void DoSomeFunction(IMyInterace t1)
{
t1.func1();
t1.func2();
...
}
这个函数不需要知道具体是哪个类实现了接口定义的内容。
[解决办法]
public interface IMyInterace
{
void DoSomething();
}
class Program1:IMyInterace
{
public void DoSomething()
{
Console.WriteLine( "111 ");
}
}
class Program2:IMyInterace
{
public void DoSomething()
{
Console.WriteLine( "222 ");
}
}
class Program3:IMyInterace
{
public void DoSomething()
{
Console.WriteLine( "333 ");
}
}
class Program
{
static void Main(string[] args)
{
List <IMyInterace> list=new List <IMyInterace> ();
list.Add(new Program1());
list.Add(new Program2());
list.Add(new Program3());
foreach(IMyInterace i in list)
{
i.DoSomething();
}
}
}
你也可以用abstract class代替Interface,不过这两者是有区别,但与此问题无关,就不说了.
这种问题看书就能知道了.何必上来问? 多看下与设计模式相关的书吧.
[解决办法]
比如
Print(IEnumable i)
{
foreach(object o in i)
Console.WriteLine(o);
}
那任何实现了IEnumable接口的类型都可以通过Print输出,ArrayList,数组等等,虽然他们具体实现不同。
[解决办法]
楼主好贴!
如果你只有一个类在程序的同一个位置DoSomething()的话,你后面一种写法就OK了,用不着Interface.
但是,如果你的t1.DoSomething();可能会被两个(或者多个)不同的类调用,而且可能会在运行时才知道调用哪个类的DoSomething(),用Interface就比较好了。
像GalfordLiu(喜欢汪峰的歌)写的代码就很能说明这个问题。
[解决办法]
你的代码,如果不处在任何上下文中,两种没有区别!所以就你的代码,没有太多需要说明的。
什么是接口?
(1)接口对于实现者(实现类)来说是定义了一种规范,比如,如果你是Windows开发人员,为了能够查询每一个硬件的描述信息,你希望所有的硬件厂商在其驱动中实现IDescribable接口(由你提供),这个接口定义了Description属性,那么当硬件厂商实现了这个接口时,你就很容易去取得每一个硬件设备的描述信息。
(2)在C#中,不支持多重继承,因此对于C#来说,接口是协助实现多重继承的工具。
(3)抽象上说,接口就是定义了某个对象的在某个特定方面的外在表现,通过实现多个接口,同一个对象对于不同的使用者反应出多个不同的面和交互方式。
(4)为了实现版本的要求,接口应该具有不变性,也就是说,接口的定义者,在实现者发布他们的对象后,不能随意修改接口定义,否则接口就会失去其意义,这就是为什么,你会经常看到IAbc,IAbc2:IAbc,...。
[解决办法]
up
[解决办法]
up
[解决办法]
amandag(高歌) ( ) 信誉:98 2007-7-15 10:00:20 得分: 0
他发的很好,你要多读读,已经很深刻的解释了接口。
[解决办法]
首先回答LZ的问题:
接口是那么用的吗? 可以肯定的告诉用法是正确的。
区别是什么? 如果就LZ的程序实现功能来说,他是没有区别的
如果真是进行区别,也就是楼上高歌所说的抽象类
(abstract class)和接口(interface)之间的区别。应该说最大的区别就是在C#中,不支持多重继承,因此对于C#来说,接口是协助实现多重继承的工具。
[解决办法]
http://blog.csdn.net/moremoreTea1983/archive/2007/07/16/1693813.aspx
让你明白什么是接口
[解决办法]
学习
[解决办法]
其实接口有好多好处,比如说变相实现多重继承。
从你写的这段代码来说,使用接口是没有任何意义的。
[解决办法]
studyed