多个接口出现同名函数的处理(C#,Delphi)
2013-01-14 11:07
113 查看
如果一个类调用多个接口,且多个接口中有同名的函数,我们知道,如果类要继承一个接口,就必须要实现接口中的所有函数,怎么办?
C#的处理原则是:
在类中要分别实现每个接口及其函数,函数名前要加上接口的名称(前面的访问修饰符不用加,因为都是public).在调用此类中函数时,要把类别成对应的接口再调用接口对应的函数。
如下代码图:
1.两个接口
2.创建类并实现以上两个接口
3.调用以上类的相关函数
Delphi的处理原则是:
给同名的函数分别设置别名,再分别实现以别名为名句的函数,以后类在调用时就是别名即可。
代码如下:
1.声明接口
2.创建类
声明部分
实现部分
3.调用以上类中的函数:
C#的处理原则是:
在类中要分别实现每个接口及其函数,函数名前要加上接口的名称(前面的访问修饰符不用加,因为都是public).在调用此类中函数时,要把类别成对应的接口再调用接口对应的函数。
如下代码图:
1.两个接口
public interface inter1 { void setname(string sname); string getname(); } public interface inter2 { void setname(string sname); string getname(); }
2.创建类并实现以上两个接口
public class Myclass : Object, inter1, inter2 { private string name=""; void inter1.setname(string sname) { MessageBox.Show("Set inter1 name"); name = sname; } void inter2.setname(string sname) { MessageBox.Show("Set inter2 name"); name = sname; } string inter1.getname() { MessageBox.Show("Get inter1 name"); return name; } string inter2.getname() { MessageBox.Show("Get inter2 name"); return name; } }
3.调用以上类的相关函数
private void button1_Click(object sender, EventArgs e) { Myclass myclass=new Myclass(); inter1 i1 = (inter1)myclass;//强制类型转换 i1.setname("vvv"); inter2 i2 = (inter2)myclass;//强制类型转换 i2.getname(); }
Delphi的处理原则是:
给同名的函数分别设置别名,再分别实现以别名为名句的函数,以后类在调用时就是别名即可。
代码如下:
1.声明接口
type IInter1=interface ['{769D95CA-90CE-41BA-A195-A6F43A30A3FC}'] function getname:string; procedure setname(sname:string); end; IInter2=interface ['{1CE978B4-F7AC-44B1-9EAD-5B8CCE1510A1}'] function getname:string; procedure setname(sname:string); end;
2.创建类
声明部分
type TMyClass=class(TInterfacedobject,IInter1,IInter2) private FName:string; public { DONE : 设定别名 } function IInter1.getName=Inter1_getname; function IInter2.getName=Inter2_getname; procedure IInter1.setname=Inter1_setname; procedure IInter2.setname=Inter2_setname; { DONE : 重新命名 } function Inter1_getname:string; function Inter2_getname:string; procedure Inter1_setname(sname:string); procedure Inter2_setname(sname:string); { DONE : 析构 } destructor destroy;override; end;
实现部分
{ TMyClass } destructor TMyClass.destroy; begin MessageDlg('exit object',mtinformation,[mbok],0); inherited; end; function TMyClass.Inter1_getname: string; begin MessageDlg('get inter1 name',mtinformation,[mbok],0); Result:=FName; end; procedure TMyClass.Inter1_setname(sname: string); begin MessageDlg('set inter1 name',mtinformation,[mbok],0); FName:=sname; end; function TMyClass.Inter2_getname: string; begin MessageDlg('get inter2 name',mtinformation,[mbok],0); Result:=FName; end; procedure TMyClass.Inter2_setname(sname: string); begin MessageDlg('set inter2 name',mtinformation,[mbok],0); FName:=sname; end;
3.调用以上类中的函数:
procedure TForm1.Button1Click(Sender: TObject); begin myclass:=TMyClass.Create; try myclass.Inter1_setname('88'); ShowMessage(myclass.Inter2_getname); finally myclass.Free; end; end;
相关文章推荐
- 多个接口出现同名函数的处理(C#,Delphi)
- C# 调用C++ DLL 返回类型为字符的接口 出现异常 解决办法
- Asp.Net : 捕捉和记录网站中出现的所有未处理错误,抛出详细的页面来源和访问ip,调用的接口方法及异常实例(记事本日志,系统日志及数据库日志)
- delphi调用c#写的webservice中文出现乱码的问题
- C#操作串口,带异常处理,解决端口占用时打开串口出现异常错误,串口关闭时发送数据报错
- 有效处理C#中异常出现的相关事项
- 飞信WEB接口的一个返回网页C#处理源码
- c#使用微信接口开发微信门户应用中微信消息的处理和应答
- C#开发微信门户及应用(31)--微信语义理解接口的实现和处理
- C# 生成XML时的特殊字符出现异常处理
- c# 关于WCF 接口参数 为 xml 格式的 字符串(string) 的 数据 处理
- c# 支付宝新版接口异步通知notify_url、Return_url处理
- C#处理和对接HTTP接口请求
- 终于懂了:Delphi消息的Result域出现的原因——要代替回调函数的返回值!(MakeObjectInstance不会帮助处理(接收)消息回调函数的返回值)
- C#中如何处理Delphi的REST Server返回的复杂结构资料
- C#窗体连接数据库出现未处理SqlException解决办法
- C#开发微信门户及应用(42)--使用Autofac实现微信接口处理的控制反转处理
- C#操作串口,带异常处理,解决端口占用时打开串口出现异常错误,串口关闭时发送数据报错
- 飞信WEB接口的一个返回网页C#处理源码