开发中非常实用的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-04-03T10:16:14 访问量:365
评论 [发表评论]