关于接口

13003517962 2003-10-18 08:29:24
我是初学,对接口理解不深,
1.接口有什么用呢?
2.接口是实现多重继承,那么他怎么实现的哪?
...全文
54 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
jhfmail 2003-10-29
  • 打赏
  • 举报
回复
补充说明:接口只是声名了这个一个方法,属性,事件,索指等,没有真正的实现,你必须到类里再去实现
jhfmail 2003-10-29
  • 打赏
  • 举报
回复
接口的主要作和在于可以实现多重继承,
比如说你要写一个类1,这个类要包括类2,也要包括类3,由于C#不支持类之间多重继承,所以你的类1 不能直接继承类2,类3,所以你可以写一个接口类,继承类2,类3,然后再写一个类继承一个接口就可以了
aspcn 2003-10-19
  • 打赏
  • 举报
回复
如果你看一下设计模式,你就知道为什么要用接口了。
13003517962 2003-10-18
  • 打赏
  • 举报
回复
to 91bct:
您 说的是接口的多重继承,不是类的多重继承,
我想问的是如何通过接口实现类的多重继承(好象书上这么说的)
to mittermeyer:
我的c++不懂,你是不是想说,由于接口的出现,即使同一个方法被执行也有不同结果,
是吗
Mittermeyer 2003-10-18
  • 打赏
  • 举报
回复
接口就是一个全部成为位纯虚函数组成的虚类,用来实现多态。
在Interop导出的时候,对应COM中的Interface。
91bct 2003-10-18
  • 打赏
  • 举报
回复
多重继承:
interface IControl
{
void Paint();
}
interface ITextBox:IControl
{
void SetText(string text);
}
interface IListBox:IControl
{
void SetItems(string[] items);
}

interface IComboBox:ITextBox,IListBox {}
注意:被继承的接口必须是能访问得到的。
Kain 2003-10-18
  • 打赏
  • 举报
回复
个人理解

继承是纵向的

接口是横向的

不知对不对
13003517962 2003-10-18
  • 打赏
  • 举报
回复
是不是这样啊
一个类如果继承并实现了这个接口,当有一个方法要这个接口时就直接给实现接口的类的实例
(这象是类的转换),
但我想知他如何实现多重继承呢?
Sample中的两个方法是通过创建实例来实现的,不是通过类继承来实现的啊.
我想如果是继承,就是通过类的继承,不用通过实例来得到方法,
你说呢?我不太懂,见笑


ivt 2003-10-18
  • 打赏
  • 举报
回复
楼上的接口例子举的好呀
因为类只能从继承另一个类,
但如果应用接口的话就可以
实现从多个类中继承了。
是不是这样呀,我也不太清楚
这些概念。
91bct 2003-10-18
  • 打赏
  • 举报
回复
如下例子:
using System;

public interface IJob
{
decimal CalcSalary(); // 计算工资
}

public interface ITax
{
decimal CalcTax(); // 计算个人所得税
}

// 类Employee实现了IJob和ITax两个接口
public class Employee: IJob,ITax
{
protected string m_EmpID=""; // 员工编号
protected decimal m_BaseSalary=0.0m; // 员工工资

// 构造函数
public Employee(string EmpID,decimal BaseSalary)
{
m_EmpID=EmpID;
m_BaseSalary=BaseSalary;
}

public virtual decimal CalcSalary()
{
return m_BaseSalary;
}

public virtual decimal CalcTax()
{
if (m_BaseSalary>800.0m)
return (m_BaseSalary-800.0m)*0.14m;
else
return 0.0m;
}

public void SetEmpID(string EmpID)
{
m_EmpID=EmpID;
}

public string GetEmpID()
{
return m_EmpID;
}
}

public class Sales: Employee // 类Sales从Empolyee派生
{
protected decimal m_Bonus; // 奖金

// 构造函数
public Sales(string EmpID,decimal BaseSalary,decimal Bonus):base(EmpID,BaseSalary)
{
m_Bonus=Bonus;
}

// 改写虚方法CalcSalary()
public override decimal CalcSalary()
{
return base.m_BaseSalary+m_Bonus;
}

// 改写虚方法CalcTax()
public override decimal CalcTax()
{
if (base.m_BaseSalary+m_Bonus>800.0m)
return (base.m_BaseSalary+m_Bonus-800.0m)*0.14m;
else
return 0.0m;
}

public decimal GetBonus()
{
return m_Bonus;
}
}

public class Sample
{
public static void DisplaySalary(IJob e)
{
Console.WriteLine("员工工资={0}元",e.CalcSalary());
}

public static void DisplayTax(ITax e)
{
Console.WriteLine("所 得 税={0}元",e.CalcTax());
}

public static void Main()
{
Employee e=new Employee("100001",6000.0m);
Console.WriteLine("员工编号={0}",e.GetEmpID());
DisplaySalary(e);
DisplayTax(e);
Console.WriteLine();
Sales s=new Sales("100002",6000.0m,1200.0m);
Console.WriteLine("员工编号={0}",s.GetEmpID());
DisplaySalary(s);
Console.WriteLine("奖 金={0}",s.GetBonus());
DisplayTax(s);
}
}
91bct 2003-10-18
  • 打赏
  • 举报
回复
接口定义不包括成员的实现,它是通过类或者结构来实现。
PhilexPei 2003-10-18
  • 打赏
  • 举报
回复
to 91bct(路人)
你的interface IComboBox:ITextBox,IListBox {}中
是否IComboBox包涵了两个IControl接口呢



Mittermeyer 2003-10-18
  • 打赏
  • 举报
回复
接口不是那个语言特有的东西,应该是一种机制,接口是用来展现对象的行为的。把行为和实现分离。
多态也一样,使OO的一个基本概念,不同的派生类继承同一个接口,分别重载实现接口函数,这就是多态的形式。
你把interface看作virtual class就行了,我认为本质上是没有区别的。

110,531

社区成员

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

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

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