zoukankan      html  css  js  c++  java
  • 用Activator.CreateInstance代替new实现类的实例化(转)

    一直想得到这样一个函数,输入一个类的名称为参数,返回一个相应的类的实例.

    这在工厂模式中是非常有用的

    这样,可以使程序有更高的扩展性,例如,,下面的例子

    如果现在有一个类,专门用来计算交通工具的速度,不同的交通工具计算方法是不一样的,但是到底有那些交通工具是未知的或者是可变的,这种情况下,我们可能觉得要在添加交通工具的时候,需要修改用来计算速度的那个类,

    但如果用Activator .CreateInstance创建实例,通过接口技术,则只要向程序集添加一个交通工具类,而不需要修改任何其它代码..实现了高扩展性.,

    示例如下:

    //接口:比如,在上例中,可以是交通工具必需实现的接口

    using System;

    namespace ActivatorCreateInstance
    {
     /// <summary>
     /// IObjcet 的摘要说明。
     /// </summary>
     public interface IObjcet
     {
      void printName();
     }
    }


    //实现接口的类:比如在上例中,是交通工具类,这种类可以在扩展的时候添加,其它类的代码不用修改

    using System;

    namespace ActivatorCreateInstance
    {
     /// <summary>
     /// ClassExam 的摘要说明。
     /// </summary>
     public class ClassExam:IObjcet
     {
      private string name="default name";
      public ClassExam()
      {
       
      }

      public ClassExam(string name)
      {
       this.name =name;
      }

      public void printName()
      {
       Console .WriteLine (this.ToString ()+"'s name is:");
      Console .WriteLine (this.name );

      }
      }
    }

    //程序入口:


    namespace ActivatorCreateInstance
    {
     /// <summary>
     /// main 的摘要说明。
     /// </summary>
     public class main
     {
      public main()
      {
       
      }

      public static void Main()
      {

    //用传递参数来得到一个类的实例


       //用Activator .CreateInstance创建函数实例,默认的不带参数的构造函数
       IObjcet obj=(IObjcet)Activator .CreateInstance(System.Type .GetType ("ActivatorCreateInstance.ClassExam,ActivatorExample" ),null);
       //System.Type .GetType  命名空间.类名,程序集
       obj.printName();

       //调用ClassExam类的另一个带参数构造函数
       IObjcet obj2=(IObjcet)System.Activator .CreateInstance (System.Type .GetType ("ActivatorCreateInstance.ClassExam,ActivatorExample" ),new string []{"seted new name"});
       obj2.printName ();
      }
     }
    }

  • 相关阅读:
    万亿养老市场如何抢占商机?云巢智慧康养物联网加速器,三招化解ISV痛点!
    13个VSCode使用技巧,开启高效的开发模式
    添零占位 —— 快速生成N个0的六种办法
    使用 dumi 打包 React 组件库并生成文档站点
    Transformer架构记录(四)
    Transformer架构记录(三)
    Transformer架构记录(二)
    Transformer架构记录(一)
    NLP预训练发展小结二(Bert之后)
    p3c 插件,是怎么检查出你那屎山的代码?
  • 原文地址:https://www.cnblogs.com/JayK/p/3813401.html
Copyright © 2011-2022 走看看