我正在使用C#开发移动应用程序(Monotouch,monodroid)。 根据这个定义,我有一个班级:
public class TempIOAddOn : BaseIOAddOn
{
public TempIOAddOn ()
{
}
}
我使用此代码通过其字符串名称访问类的实例:
BaseIOAddOn tempIOAddOn;
Type t= Type.GetType("TempIOAddOn" );
tempIOAddOn = (BaseIOAddOn)Activator.CreateInstance(t);
但在执行完毕后,t
为null
。
我也试过下面的代码:
BaseIOAddOn tempIOAddOn;
tempIOAddOn = (BaseIOAddOn )System.Reflection.Assembly.GetExecutingAssembly().CreateInstance("TempIOAddOn" );
但我再次面对null
。 tempIOAddOn
为null
。
我有什么问题?
答案 0 :(得分:8)
您的类几乎肯定包含在命名空间中。在这种情况下,您需要使用其命名空间限定类型的名称:
Type t= Type.GetType("MyNamespace.TempIOAddOn");
答案 1 :(得分:5)
请尝试使用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