学习C#对接口问题的一个疑惑
interface IControl
{
void Print();
}
interface ITextBox : IControl
{
void SetText(string text);
}
interface IListBox : IControl
{
void SetItem(string[],items);
}
interface IComboBox:ITextBox,IListBox
{;}
这个例子中,接口ITextBox和IListBox都从接口IControl中继承,也就继承了就口的Print方法,接口IComboBox从
接口ITextBox和IListBox 继承,因此,它也继承了ITextBox的方法SetText 和接口IListBox的方法SetItem 当然还有IControl的方法Print
接口继承和类继承不同,类继承不仅使说明继承,而且也是实现继承,而接口继承只是说明继承,也就是派生类的接口只是父接口的方法说明
,而没有继承父接口的实现。
这句话在此处如何理解?是否意味着虽然接口IComboBox继承了ITextBox的方法SetText 和接口IListBox的方法SetItem,但是 当它使用时必须
重新定义
写出接口的函数型方法的数据结构吗?
答案---------->>
接口继承只是对接口中的方法定义继承,在接口中方法只能进行定义不能进行实现,具体的实现则要在继承接口的类中写,而类不同,子类继承了
父类方法的定义和方法的实现
方法的实现==函数、方法、过程的调用?
是的.要在实现接口的类中去实现接口的方法
如果楼主把上面的代码在VS.net里打一遍就会明白.
如果一个类去实现IComboBox接口的话.
IDE会自动生成一些要你实现的接口的元素.
你就明白啦.
2:学习C#遇到的接口的继承机制的问题
学习C#遇到的接口的继承机制的问题
如果不显式的重现实现接口,派生类就无法改变从基类中继承的接口映射
interface IControl
{
void Paint();
}
calss Control : IControl
{
public void Paint(){.....}
}
class TextBox : Control
{
new publict void Paint(){.....}
}
Control c=new Control();
TextBox t=new TextBox();
IControl ic=c;
IControl it=t;
c.Paint(); //invokes Control.Paint()
t.Paint(); //invokes TextBox.Paint()
ic.Paint(); //invokes Control.Paint()
it.Paint(); //invokes Control.Paint()
在这个程序中,类TextBox 的方法掩盖了 Control的方法,但是没有改变Control.Paint对IControl.Paint的映射 为什么会出现这样调动结果
?
我的问题如下:
1:Control c=new Control();TextBox t=new TextBox(); 是两个实例化的类对象IControl ic=c;IControl it=t; 这两个语句什么意思?ic、
it
是两个接口类型的对象 为什么可以可以被赋值类对象?
2:既然类TextBox 的方法掩盖了 Control的方法 那么执行it.Paint() 为什么还会调动 //invokes
Control.Paint()我认为应该是://invokes TextBox.Paint()?
答案------->>>>
1:基类指针可以指向派生类. 反过来则不行!
比如:有雇员接口. 经理类和普通职员类都继承雇员接口.
任何经理和普通职员都是公司的雇员. 反过来则不行.
2:TextBox类继承了Control类,覆盖了Control类的paint()方法.
这只是当调用TextBox类的paint()方法时,首先执行程序会从父类找,因为Control类的paint()方法被覆盖了,所以找不到.因为没有从父类获得
相关的方法,程序会继续向下找.
直到找到方法.
如果直接调用接口对象,因为接口里只是声明方法,并没有逻辑实现.所以继续向该类的子类找,在Control类能找到该方法.