C# DuckTyping 类
为什么引入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();
}
}
运行结果: