C# DuckTyping 類

來源:互聯網
上載者:User
為什麼引入Duck Typing?

 

ADuck,BDuck,XDuck…………. 為linq 映射的n張資料庫表,表名稱不同,欄位結構完全相同。

如何?只用一個Display方法,依據傳入不同的實體,就能自動顯示實體的資訊。而且Display方法中可以通過強型別訪問實體的成員。

思路:如果有如下繼承結構的話,就可以實現上述要求。

現實問題是,不能更改ADuck,BDuck,XDuck的繼承類。/Files/hbb0b0/DuckApp.rar

 

 

如果能把對ADuck,BDuck,XDuck的操作動態轉化成IDuck介面,公用方法只是對IDuck方法的操作,也可以實現上述要求。

 

DuckType類具有把相同結構的類,但不繼承統一介面的類型轉成統一介面的類型的功能。

 

 

 

具體實現代碼

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using NDuck;

using System.ComponentModel;

using System.Reflection;

namespace DuckApp

{

 

 /// <summary>

    /// 定義動態轉換介面

    /// </summary>

   public interface IDuck

    {

        string Name

        {

            get;

            set;

        }

 

        long ID

        {

            get;

            set;

        }

    }

 

  

    class Program

    {

 

 

        static void DisplayDuck(object a)

        {

 

            ///轉換

            IDuck duck = DuckTyping.Implement<IDuck>(a);

 

            Console.WriteLine(string.Format("ID:{0} Name:{1}", duck.ID.ToString(), duck.Name));

 

        }

 

 

        static void Main(string[] args)

        {

            ADuck a = new ADuck() { Name = "A" + DateTime.Now.ToString() };

          

            BDuck b = new BDuck() { Name = "B" + DateTime.Now.ToString() };

 

 

            DisplayDuck(a);

            DisplayDuck(b);

          

            Console.Read();

           

 

        }      

}

 

運行結果:

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.