美文网首页
47.C# 接口的进阶

47.C# 接口的进阶

作者: 技术老小子 | 来源:发表于2024-03-16 06:59 被阅读0次

    摘要


    我们这里主要再讨论一下,C#8.0以后接口的变化,你会发现我们对接口的一些定义发生了变化,再有我们会写一个接口多继承的例子,这些在实际业务有都有用到。

    正文


    C#8.0后的变化

    默认接口方法

    再次修改IMaterial

    public interface IMaterial
    {
        string Name { get; set; }
        string Mlfb { get; set; }
    
        bool Start();
        bool Stop();
    
        //默认接口方法
        void ReadValue(string Address)
        {
            Console.WriteLine(Address + "读数据");
        }
    }
    
    

    创建一个Plc类

    internal class Plc : IMaterial
    {
        public string Name { get; set; }
        public string Mlfb { get; set; }
    
        //申明成虚方法
        public virtual bool Start()
        {
            Console.WriteLine($"{this.Name} Start");
            return true;
        }
    
        public virtual bool Stop()
        {
            Console.WriteLine($"{this.Name} Stop");
            return true;
        }
    }
    
    

    再创建一个S71200类

    internal class S71200 : Plc
    {
        public override bool Start()
        {
            Console.WriteLine("我是1200,运行中...");
            return true;
        }
    }
    
    

    调用,这样也是可以的了,是不是有点懵了,这不根抽像类越来越像了

    //通过接口声明
    IMaterial material3 =new S71200();
    material3.Name = "1217";
    material3.Start();
    material3.Stop();
    material3.ReadValue("DB0.0");
    
    
    image.png

    静态类

    //再来一个读取数据
    static int ReadQty { get; set; }
    
    

    调用

    //通过接口声明
    IMaterial material1 = new Plc();
    material1.Name = "S7-1500";
    material1.Start();
    material1.Stop();
    material1.ReadValue("DB0.0");
    
    //通过接口声明
    IMaterial material2 = new Motor();
    material2.Name = "S120";
    material2.Start();
    material2.Stop();
    material1.ReadValue("DB0.0");
    
    //通过接口声明
    IMaterial material3 =new S71200();
    material3.Name = "1217";
    material3.Start();
    material3.Stop();
    material3.ReadValue("DB0.0");
    
    Console.WriteLine(IMaterial.ReadQty);
    
    
    image.png

    多继承

    类只能继承一个类,不能继承多个类,但可以继承多个接口Interface。

    定义一个IBusiness接口

    internal interface IBusiness
    {
        void Sell();
        void Purchase();
    }
    
    

    修改S71200类

    internal class S71200 : Plc, IBusiness
    {
        public void Purchase()
        {
            IMaterial.ReadQty++;
            Console.WriteLine("买了一个1200!");
        }
    
        public void Sell()
        {
            IMaterial.ReadQty--;
            Console.WriteLine("卖了一个1200!");
        }
    
        public override bool Start()
        {
            Console.WriteLine("我是1200,运行中...");
            return true;
        }
    }
    
    

    调用

    //通过接口声明
    IMaterial material1 = new Plc();
    material1.Name = "S7-1500";
    material1.Start();
    material1.Stop();
    material1.ReadValue("DB0.0");
    
    //通过接口声明
    IMaterial material2 = new Motor();
    material2.Name = "S120";
    material2.Start();
    material2.Stop();
    material1.ReadValue("DB0.0");
    
    //通过接口声明
    IMaterial material3 =new S71200();
    material3.Name = "1217";
    material3.Start();
    material3.Stop();
    material3.ReadValue("DB0.0");
    ((S71200)material3).Purchase();
    Console.WriteLine(IMaterial.ReadQty);
    ((S71200)material3).Sell();
    
    Console.WriteLine(IMaterial.ReadQty);
    
    
    image.png

    相关文章

      网友评论

          本文标题:47.C# 接口的进阶

          本文链接:https://www.haomeiwen.com/subject/mafgzdtx.html