為什麼引入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();
}
}
運行結果: