文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>定义简单的反射工厂示例

定义简单的反射工厂示例

时间:2011-05-20  来源:钢钢


首先,定义一个水果抽象类,代码如下:

class Fruit
{
    //定义虚方法
    public virtual void Eating()
    {
        Console.WriteLine("水果有各种吃法。。。");
    }
}

 

然后,实例化几个水果类,代码如下:

class Banana : Fruit
{
    public override void Eating()
    {
        Console.WriteLine("香蕉扒皮吃。。。");
    }
}

class Orange : Fruit
{
    public override void Eating()
    {
        Console.WriteLine("橘子剥皮吃。。。");
    }
}

class Apple : Fruit
{
    public new void Eating()
    {
        Console.WriteLine("苹果洗了吃。。。");
    }

    //public override void Eating()
    //{
    //    Console.WriteLine("苹果洗了吃。。。");
    //}
}

 

最后,创建水果工厂,代码如下:

//水果工厂
class FruitFactory
{
    //生成水果
    public Fruit CreateFruit(string _fruitname)
    {
        //不使用反射的做法如下:
        //if ("Apple" == _fruitname)
        //{
        //    return new Apple();
        //}
        //else if ("Banana" == _fruitname)
        //{
        //    return new Banana();
        //}
        //else if ("Orange" == _fruitname)
        //{
        //    return new Orange();
        //}
        //else
        //{
        //    throw new Exception("您指定的水果不生产!");
        //}

        //获得当前程序的命名空间
        string strNamespace = Assembly.GetExecutingAssembly().GetName().Name;

        //调用方法一:使用 Type 类
        //Type type = Type.GetType("ConsoleApplication1." + _fruitname);
        //ConstructorInfo ctorInfo = type.GetConstructor(System.Type.EmptyTypes);
        //// Invoke()方法:返回与构造函数关联的类的实例。
        //Fruit fruitA = (Fruit)ctorInfo.Invoke(new object[0]);
        //return fruitA;

        //调用方法二:使用 Assembly 类
        //Assembly myAssembly = Assembly.GetExecutingAssembly();
        //Fruit fruitB = (Fruit)myAssembly.CreateInstance("ConsoleApplication1." + _fruitname);
        //return fruitB;

        //调用方法三:使用 Activator 类
        Fruit fruitC = (Fruit)Activator.CreateInstance(Type.GetType("ConsoleApplication1." + _fruitname, false, true));
        return fruitC;
    }
}

 

测试代码如下:

class Program
{
    static void Main(string[] args)
    {
        FruitFactory ff = new FruitFactory();

        //打印(来自父类的):水果有各种吃法。。。
        Fruit fA = ff.CreateFruit("Apple");
        fA.Eating();

        //打印(来自子类的):苹果洗了吃。。。
        Apple apple = ff.CreateFruit("Apple") as Apple;
        apple.Eating();

        Fruit fB = ff.CreateFruit("Banana");
        fB.Eating();

        Fruit fC = ff.CreateFruit("Orange");
        fC.Eating();
    }
}

 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载