(.NET进阶十二)OOP接口多态/接口框架设计/主从窗体通信

一、接口

  • .NET中接口的定义规范
    • 使用关键字interface定义,接口类名称通使用“I”开头
    • 接口中的属性、方法等,只是做一个声明,而没有任何实现
    • 接口中的属性、方法等,默认是public
      interface IStudent
      {
          //属性
          string StudentName{get;set;}
          string StudentGender{get;set;}
          
          //接口方法
          string GetStudentInfo();
          void Study();
      }

       

  • 接口特点
    • 接口具有强制性,实现接口的类必须实现接口所有的成员
    • 一个类可以实现多个接口,也可以同时继承其他类,先继承类后实现接口
  • 接口实践应用
    • 提高团队成员并行开发项目的效率
      • 接口使用者值关心接口的应用功能,而不关心接口的实现细节
      • 接口的实现者只关心接口如何实现的内部细节,不关心谁使用
        class HPMultiPrinter:IMultiPrinter
        {
            public void Print(string contents)
            {
                ....
            }
            
            public void Copy(string contents)
            {
                ....
            }
        
            public void Fax(string contents)
            {
                ....
            }
        }
        
        static void Main(string[] args)
        {
            IMultiPrinter objHPPrint = new HPMultiPrinter();
            objHPPrint.Print("信息表");
            ...
        }

         

      • 接口应用总结
        • 接口的应用场合
          • 如果某一个功能点需求变化较多,应使用接口保证系统的可扩展性
          • 如果想实现团队成员的并发开发,可以使用接口来规范对象的使用
        • 接口编写规范
          • 接口成员只能是一个声明
          • 实现接口的类必须全部实现接口中规定的属性、方法
        • 特别说明
          • 接口的使用不是必须的,需要根据用户的需求来决定
        • 接口与抽象类的比较

二、接口框架设计

接口设计,源于对需求的更好的理解

接口抽取,就是根据需求模块,进行功能分装

三、委托应用-主从窗体通信

从窗体向主窗体传递数据

1.主窗体中声明委托:
public delegate void ShowCounter(string counter);

2.根据委托创建方法
//接收委托传递的信息
 private void Receiver(string counter)
{
    this.lblCount.Text = counter;/.界面显示
}

3.从窗体穿件委托变量
public ShowCounter msgSender;

//主窗体
namespace DeletegateFromComm
{
    /// <summary>
    /// 主窗体
    /// </summary>
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            
            Form2 obj = new Form2();
            //将从窗体的委托变量和主窗体的对应方法关联
            obj.msgSender = this.Receiver;
            obj.Show();
        }

        private void Receiver(string counter)
        {
            this.lblCount.Text = counter;
        }
    }

    /// <summary>
    /// 声明委托
    /// </summary>
    /// <param name="counter"></param>
    public delegate void ShowCounter(string counter);
}




//从窗体
public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        //根据委托创建委托对象
        public ShowCounter msgSender;
        private int counter = 0;

        private void button1_Click(object sender, EventArgs e)
        {
            counter++;
            if (msgSender != null)
            {
                msgSender(counter.ToString());
            }
        }
    }



 

主窗体向从窗体发送信息

主窗体

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
            Frm01 obj1 = new Frm01();
            Frm02 obj2 = new Frm02();
            Frm03 obj3 = new Frm03();
 
            this.msgSender += obj1.Receicee;
            this.msgSender += obj2.Receicee;
            this.msgSender += obj3.Receicee;
 
            obj1.Show();
            obj2.Show();
            obj3.Show();
 
        }
        public ShowCounter msgSender;
        private int counter = 0;
        private void button1_Click(object sender, EventArgs e)
        {
            counter++;
            //同时发送消息
            this.msgSender.Invoke(counter.ToString());
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            counter = 0;
            this.msgSender.Invoke("0");
        }
    }
 
    public delegate void ShowCounter(string counter);

从窗体

public partial class Frm01 : Form
    {
        public Frm01()
        {
            InitializeComponent();
        }
 
        /// <summary>
        /// 接收委托传递的信息
        /// </summary>
        /// <param name="counter"></param>
        public void Receicee(string counter)
        {
            this.lblCount.Text = counter;
        }
    }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值