用Activator .CreateInstance代替new实现类的实例化

原创 2005年05月25日 11:15:00

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

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

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

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

但如果用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 ();

  }
 }
}


C# Activator和new的区别

基于接口的Remoting对象是不能用new来创建的,可以直接使用Activator来创建
  • cbbbc
  • cbbbc
  • 2016年11月22日 15:27
  • 1475

关于Assembly.CreateInstance()与Activator.CreateInstance()方法的区别

关于Assembly.CreateInstance()与Activator.CreateInstance()方法的区别呃``最近用惯了Activator.CreateInstance()和Activa...
  • zhanglei5415
  • zhanglei5415
  • 2007年07月02日 10:26
  • 2257

用Activator .CreateInstance代替new实现类的实例化

我一直想得到这样一个函数,输入一个类的名称为参数,返回一个相应的类的实例.这在工厂模式中是非常有用的这样,可以使程序有更高的扩展性,例如,,下面的例子如果现在有一个类,专门用来计算交通工具的速度,不同...
  • antlxy
  • antlxy
  • 2005年05月25日 11:15
  • 5080

Use System.Activator.CreateInstance

///   /// 得到给定一个IMessageDetail的实现类的实例的工厂  ///   /// IMessageDetail的实现类的类名,此类名包括完整的域名空间  /// IMessage...
  • mydriverc
  • mydriverc
  • 2007年07月26日 11:18
  • 1194

用Activator .CreateInstance代替new实现类的实例化

我一直想得到这样一个函数,输入一个类的名称为参数,返回一个相应的类的实例.这在工厂模式中是非常有用的这样,可以使程序有更高的扩展性,例如,,下面的例子如果现在有一个类,专门用来计算交通工具的速度,不同...
  • jackeyabc
  • jackeyabc
  • 2008年07月12日 17:06
  • 3858

C#中Activator.CreateInstance()方法用法分析

本文实例讲述了C#中Activator.CreateInstance()方法用法。分享给大家供大家参考。具体分析如下: Activator 类 包含特定的方法,用以在本地或从远程创建对象类型,或获...
  • cbbbc
  • cbbbc
  • 2016年11月22日 15:21
  • 1896

C# Activator.CreateInstance()方法使用

C#在类工厂中动态创建类的实例,所使用的方法为: 1. Activator.CreateInstance (Type) 2. Activator.CreateInstance (Type, ...
  • daodaowolf
  • daodaowolf
  • 2013年05月26日 19:02
  • 8648

使用Activator.CreateInstance完善简单工厂

前几天在项目中看到别人的工厂类使用Activator.CreateInstance() 之前用简单工厂都是用switch ...case ,之前没有用过便查了查资料,正是这个方法+ 反射简化了工厂模式...
  • u011555996
  • u011555996
  • 2016年11月07日 17:19
  • 1799

用Activator .CreateInstance代替new实现类的实例化Assembly.CreateInstance()与Activator.CreateInstance()方法的区别

我一直想得到这样一个函数,输入一个类的名称为参数,返回一个相应的类的实例.这在工厂模式中是非常有用的这样,可以使程序有更高的扩展性,例如,,下面的例子如果现在有一个类,专门用来计算交通工具的速度,不同...
  • aspnet2002web
  • aspnet2002web
  • 2010年12月02日 14:55
  • 903

Activator.CreateInstance使用中的参数传入

 1、来定义一个接口Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter...
  • figerdeng
  • figerdeng
  • 2009年04月03日 17:55
  • 2527
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用Activator .CreateInstance代替new实现类的实例化
举报原因:
原因补充:

(最多只允许输入30个字)