【问题标题】:C# get user to create class instanceC#让用户创建类实例
【发布时间】:2009-12-11 17:24:33
【问题描述】:

如果有一个类,例如“Painter”,并且需要用户能够在运行时创建这个类的一个或多个实例,那么最好的方法是什么?

所以每次用户点击一个按钮,我们都需要一个新的painter对象?

或者每次用户输入“新画家”时,我们都需要一个新的画家实例?

【问题讨论】:

  • 所有对象实例都是在运行时通过调用类型构造函数创建的。您需要详细说明您的问题。您是否试图让用户键入将被动态评估的 C# 代码?

标签: c# object


【解决方案1】:

您可以使用Type.GetTypestring 获取Type

一旦你有了Type对象,你可以调用Activator.CreateInstance来实例化它,或者调用Type.GetConstructors,选择一个合适的构造函数然后调用它。

顺便提一下,关于Type.GetType 的两个“陷阱”:

  • 您必须在类型名称中包含命名空间
  • 除非类型在当前正在执行的程序集中或mscorlib,否则您还需要指定程序集名称​​如果它是强命名的,则带有版本信息

如果您有对相关程序集的引用,那么 Assembly.GetType 可能是一种更简单的方法 - 但您仍然需要包含命名空间。

【讨论】:

  • “如果是强类型的版本信息”应该是“如果是强名称的版本信息”
【解决方案2】:

我猜你的问题的要点是在用户输入之前类类型是未知的。否则,如果您希望在每次按钮单击时都有一个新的 Painter 类,您可以简单地处理按钮单击并执行“var newpainter = new Painter();”。

因此,假设您需要动态创建一个未知类型的实例,您可以在运行时使用反射来执行此操作。

var newpainter =  Activator.CreateInstance(Type.GetType("Painter"), args);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多