个人资料

跳过导航链接首页 > 博客列表 > 博客正文

开发中非常实用的C#接口使用经典案例

分类:

在c#中类的继承无法多重继承,但是可以继承多个接口.下面介绍一个C#中接口简单的使用案例.

假设我们编写了一个用于科学计算的DLL组件(ProgramA),在另外的项目ProgramB中调用这个组件.

因为ProgramA是个耗时计算,并且会根据输入信息报错,因此我们希望ProgramA在计算过程中传递一些消息报告计算的详细进度.显示在ProgramB界面上

ProgramA的DLL在计算过程中,怎么把计算过程中消息传递给ProgramB呢?下面使用接口来实现:

首先ProgramA中写一个接口,定义了两个功能,传递消息和传递进度

public interface IMsgCenter
{
    Task ShowMessage(string msg);
    Task ShowProcess(double process);
}

然后在A的主程序,需要进行消息输出的的类中加入一个MsgCenter属性

public class Main
{
    public Main() { }
    //根据接口定义一个属性
    public static IMsgCenter MsgCenter { get; set; }
   .......
 }

同时在A的主程序中,需要进行消息输出的地方进行调用

MsgCenter.ShowMessage("我是用来测试的字符串");

ProgramA只定义了接口并调用了接口中的方法,但没有定义接口的具体实现.

接口实现在ProgramB的程序中.假设这是一个Winform程序,在后台代码中实现IMsgCenter接口.

public partial class Form1 : Form,IMsgCenter
{
        public Task ShowMessage(string msg)
        {
            DebugTextBox.AppendText("\n" +msg + "\n");
            return null;
        }
 
        public Task ShowProcess(double process)
        {
            throw new NotImplementedException();
        }
}

其中DebugTextBox是winform的一个TextBox控件,也就是通过上面的代码定义了接口的实现,将消息Msg写到TextBox控件里面.

最后一步:虽然Form1实现了IMsgCenter接口,但ProgramA中的属性MsgCenter还是空的,在Form1类中加入

//Main为dll主程序类
Main m = new Main();
//将Main的MsgCenter属性设置为自己
Main.MsgCenter = this;

在调用Dll计算之前加入,这样DLL中消息的输出就都可以显示在ProgramB界面上了.

这个案例中,ProgramA中之定义接口而没有定义接口的具体实现,具体实现是ProgramB的设计者所需要考虑的事情.

使用接口实现多重继承:

接口 InterfaceA,InterfaceB

类 ClassA实现接口A功能,定义具体实现

类 ClassB实现接口B功能,定义具体实现

类 主程序类ClassC 定义两个属性PropertyM,PropertyN

这个两个属性分别是实例化的ClassA和ClassB,在ClassC中调用A,B属性的的方法即可.

达到的效果和多重继承是一样的,并且使用接口使得条理更清晰,容易管理.

这就是开发中非常实用的C#接口使用经典案例

songshizhao
最初发表2018/4/3 22:16:14 最近更新2018/4/3 22:16:14 5998
为此篇作品打分
10
   评论