.NET簡談——跨進高階程式設計門檻的必經之路

weixin_34391854發表於2011-07-08

我們繼續C#基礎知識的學習,這篇文章對前面基礎知識學習的朋友有著舉足輕重的作用;為了延續基礎知識學習的熱情,我編寫了這篇特殊的文章。

本篇文章的中心是想借“.NET簡談反射(動態呼叫)”一文繼續發揮下去,讓朋友能一氣呵成,到底反射能用在什麼地方,究竟能起到多麼高階的作用。

下面我就拿具體的例子講解,不廢話了請隨我來;

1:必須具備的基礎知識

C#介面:要想用反射進行高深的使用,必須先具備介面方面的基礎,只有用介面了才能是系統真真的活起來。參考.NET簡談介面 一文;

C#委託、事件:在動態呼叫的過程中,我們難免要進行一些資料的傳遞,這樣的傳遞是要用介面進行傳遞,我們不可能強耦合。參考.NET簡談事件與委託一文;

C#反射:這是最關鍵的一點,所有的東西都是圍繞這個點在轉,在我們下面的示例中,我們要動態的使用反射獲取介面物件。參考.NET簡談反射(動態呼叫) 一文;

2:示例內容介紹

示例的主要內容是圍繞著我們前面所學習的基礎知識的做統一應用,以鞏固我們的基礎,使我們能在真正的專案中靈活運用,將自己提升到一個新的高度;

都知道介面是規範,都知道事件委託,都知道反射,但是我們都只是知道這些零零散散的知識點,我們怎麼將這些小技術穿起來,形成堅實的程式碼結構;

示例要進行講解的大概內容是這樣的:我們定義一個介面,然後用物件去實現它,在我們使用的時候,我們動態的通過反射的去呼叫,但是反射的時候,我需要用介面進行確定唯一性,因為我們更本不知道誰實現了介面,所以介面的好處就出來了;

3:開始示例學習

定義介面:

using System;
using System.Collections.Generic;
using System.Text;

namespace MainInterface
{
    /// <summary>
    /// 成功計算後的委託
    /// </summary>
    /// <param name="count">返回計算後的值</param>
    public delegate void AddHandler(int count);
    /// <summary>
    /// 新增方法介面
    /// </summary>
    public interface AddInterface
    {

        /// <summary>
        /// 計算結束後的事件
        /// </summary>
        event AddHandler AddEndEvent;
        /// <summary>
        /// 計算兩個數的和
        /// </summary>
        /// <param name="i">number1</param>
        /// <param name="j">number2</param>
        void add(int i, int j);
    }
}
 

實現介面:

using System;
using System.Collections.Generic;
using System.Text;

namespace TestDll
{
    public class Math : MainInterface.AddInterface
    {

        #region AddInterface 成員

        public event MainInterface.AddHandler AddEndEvent;

        public void add(int i, int j)
        {
            AddEndEvent(i + j);
        }

        #endregion
    }
}

具體呼叫:

 
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.Diagnostics;

namespace Reflection
{
    class Program
    {
        static void Main(string[] args)
        {
            Assembly dll = Assembly.LoadFile(Environment.CurrentDirectory + "\\TestDll.dll");

            foreach (Type type in dll.GetTypes())
            {
                if (type.GetInterface("MainInterface.AddInterface") != null)
                {
                    MainInterface.AddInterface add = Activator.CreateInstance(type, true) as MainInterface.AddInterface;
                    add.AddEndEvent += new MainInterface.AddHandler(add_AddEndEvent);
                    add.add(10, 20);


                }
            }

        }

        static void add_AddEndEvent(int count)
        {

            Console.WriteLine("Invoke Method:\n" + count.ToString());

            Console.ReadLine();
        }
    }
}

總結:所謂麻雀雖小,五臟俱全;上面的示例程式碼雖然沒什麼作用,但是基本上能概括我們日常所用到的;這也是我們進入框架開發、系統開發必經之路;

 

相關文章