反射-利用接口:使用后期绑定的正确方法
+展开
-C#
///为了使用一个在编译期间未知的类,除了我们介绍过的通过使用后期绑定的方法外,
///还有另一个完全不同的方法。该方法具有较大优势,因为与使用早期或动态绑定相比
///它在性能上几乎没有损失。不过,为了使用该“秘决”,你必须知道自己遵循某种
///规范(实际上就是Pluge设计模式)。
///我们的想法是确保在编译时未知的类型实现了一个接口,而该接口是编译器所知的。
///为此,我们不得不创建第三个程序集,用于承载该接口,让我们用三个程序集重写
///前面的例子:
///第一个程序集 定义了一个接口
///
using System;
using System.Collections.Generic;
using System.Text;
public interface ICalc
{
int Sum(int a, int b);
}
///第二个程序集是要被反射的程序集
///第二个程序集要引用第一个程序集,然后实现第一个程序集
///定义的接口
using System;
using System.Collections.Generic;
using System.Text;
namespace wangjun
{
public class wangjun:ICalc
{
public int Sum(int i, int j)
{
return i + j;
}
}
}
///第三个程序集是使用反射的程序集,它同样也要引用第一个程序集,
///从而使用第一个程序集的接口。
///
using System;
using System.Reflection;
class program
{
static void Main()
{
//将得到的对象直接强制转换为接口类型
ICalc obj = AppDomain.CurrentDomain.CreateInstanceAndUnwrap("wangjun", "wangjun.wangjun") as ICalc;
//使用接口类型的方法,得到运行结果并输出
Console.WriteLine(obj.Sum(100, 100));
}
}
///本例中,使用了三个程序集,其中第一个程序集是第二和第三个程序集
///都要引用的,也就是说,第二个程序集和第三个程序集都有一个可共用
///的接口类型ICalc,所以才可以这样简单的使用反射。
///还有另一个完全不同的方法。该方法具有较大优势,因为与使用早期或动态绑定相比
///它在性能上几乎没有损失。不过,为了使用该“秘决”,你必须知道自己遵循某种
///规范(实际上就是Pluge设计模式)。
///我们的想法是确保在编译时未知的类型实现了一个接口,而该接口是编译器所知的。
///为此,我们不得不创建第三个程序集,用于承载该接口,让我们用三个程序集重写
///前面的例子:
///第一个程序集 定义了一个接口
///
using System;
using System.Collections.Generic;
using System.Text;
public interface ICalc
{
int Sum(int a, int b);
}
///第二个程序集是要被反射的程序集
///第二个程序集要引用第一个程序集,然后实现第一个程序集
///定义的接口
using System;
using System.Collections.Generic;
using System.Text;
namespace wangjun
{
public class wangjun:ICalc
{
public int Sum(int i, int j)
{
return i + j;
}
}
}
///第三个程序集是使用反射的程序集,它同样也要引用第一个程序集,
///从而使用第一个程序集的接口。
///
using System;
using System.Reflection;
class program
{
static void Main()
{
//将得到的对象直接强制转换为接口类型
ICalc obj = AppDomain.CurrentDomain.CreateInstanceAndUnwrap("wangjun", "wangjun.wangjun") as ICalc;
//使用接口类型的方法,得到运行结果并输出
Console.WriteLine(obj.Sum(100, 100));
}
}
///本例中,使用了三个程序集,其中第一个程序集是第二和第三个程序集
///都要引用的,也就是说,第二个程序集和第三个程序集都有一个可共用
///的接口类型ICalc,所以才可以这样简单的使用反射。
来源http://2sws.blog.163.com/blog/static/179102492009843457625/
加支付宝好友偷能量挖...