=波波日志 > Asp.Net/C#/WCF > 反射-利用接口:使用后期绑定的正确方法=
[转]反射-利用接口:使用后期绑定的正确方法
+展开
-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/
类别:Asp.Net/C#/WCF 作者:转载 日期:2010-12-03 【评论:0】
相关文章
暂时没有评论!
发表留言
热门博文
- IE里Cookie跨域不能读取
- web服务因URL意外地以/**结束,请求格式无法识别
- 去掉隐藏asp.net编译出错aspxerrorpath错误参数
- 解决asp.net验证视图状态 MAC 失败
- 找不到System.Web.Script.Services.ScriptService
- 在aspx,ashx页面挂起线程执行
最新博文
- WCF利用限流(Throttling)控制并发访问[下篇]
- WCF利用限流(Throttling)控制并发访问[上篇]
- ConcurrencyMode.Multiple模式下的WCF服务同步上下文对并发的影响[下篇]
- ConcurrencyMode.Multiple模式下的WCF服务同步上下文对并发的影响[上篇]
- WCF基于ConcurrencyMode.Reentrant模式下的并发控制机制
- C#如何设置标记方法等为否决的不可用
随机博文
- C#读取和写入Excel
- C#重载运算符
- WCF调用技巧二
- C#在Excel文档中搜索文本
- WCF基于ConcurrencyMode.Reentrant模式下的并发控制机制
- 第16章 ASP.NET 3.5和AJAX
广告商赞助

