反射-利用接口:使用后期绑定的正确方法

+展开
-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,所以才可以这样简单的使用反射。


来源http://2sws.blog.163.com/blog/static/179102492009843457625/

加支付宝好友偷能量挖...


评论(0)网络
阅读(74)喜欢(0)Asp.Net/C#/WCF