【问题标题】:Getting Class object from its string name in C# [duplicate]从 C# 中的字符串名称获取类对象 [重复]
【发布时间】:2013-04-27 11:44:21
【问题描述】:

我正在使用 C# 开发移动应用程序(Monotouch、monodroid)。 我有一个这样定义的类:

public class TempIOAddOn : BaseIOAddOn 
{
    public TempIOAddOn ()
    {
    }
}

我使用这段代码通过字符串名称访问类的实例:

BaseIOAddOn tempIOAddOn;
            Type t= Type.GetType("TempIOAddOn" );
            tempIOAddOn  = (BaseIOAddOn)Activator.CreateInstance(t);

但执行后,tnull

我也试过下面的代码:

BaseIOAddOn tempIOAddOn;
            tempIOAddOn = (BaseIOAddOn )System.Reflection.Assembly.GetExecutingAssembly().CreateInstance("TempIOAddOn" );

但我再次面对nulltempIOAddOnnull

我怎么了?

【问题讨论】:

标签: c# reflection xamarin.ios xamarin.android


【解决方案1】:

您的类几乎肯定包含在命名空间中。在这种情况下,您需要使用其命名空间来限定类型的名称:

Type t= Type.GetType("MyNamespace.TempIOAddOn");

【讨论】:

  • 感谢您的回复。两个答案都是正确的,只能选择一个作为答案。取而代之的是 1 upvote 以获得明确的答案。
【解决方案2】:

尝试改用Assembly Qualified Name。如果它正在运行 Xamarin,它可能需要使用完整的限定名。 Silverlight 也有同样的限制。

要快速获取全名,只需引用类型并输出即可:

Console.WriteLine(typeof(TempIOAddon).AssemblyQualifiedName);

编辑:这是 Silverlight 的 Type.GetType(string) 的 MSDN 文档。由于 Xamarin 的移动平台或多或少是基于它的,所以一般文档可以申请:http://msdn.microsoft.com/en-us/library/w3f99sx1%28v=vs.95%29.aspx

请注意,如果类型在当前执行的程序集中,您可能只需要完整的 namespace.name

【讨论】:

  • 感谢您的回复,它正在工作。
猜你喜欢
  • 1970-01-01
  • 2014-01-22
  • 1970-01-01
  • 2011-08-04
  • 2019-04-30
  • 2011-11-22
  • 2021-06-17
  • 1970-01-01
相关资源
最近更新 更多