(.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;
        }
    }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章