3

モバイル アプリケーション (モノタッチ、モノドロイド) の開発に C# を使用しています。私はこの定義によるクラスを持っています:

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" );

しかし、再び直面しnullます。tempIOAddOnですnull

私は一体どうしたんだろう?

4

2 に答える 2

8

あなたのクラスはほぼ確実に名前空間に含まれています。この場合、型の名前をその名前空間で修飾する必要があります。

Type t= Type.GetType("MyNamespace.TempIOAddOn");
于 2013-04-27T11:49:38.687 に答える
5

代わりにアセンブリ修飾名を使用してみてください。Xamarin を実行している場合は、完全修飾名を使用する必要がある場合があります。Silverlight でも同じ制限がありました。

完全な名前をすばやく取得するには、型を参照して出力します。

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

Type.GetType(string)編集: Silverlightの MSDN ドキュメントは次のとおりです。Xamarin のモバイル プラットフォームは多かれ少なかれ Xamarin に基づいているため、一般的には次のドキュメントを適用できます

タイプが現在実行中のアセンブリにある場合は、おそらく完全な namespace.name のみが必要になることに注意してください。

于 2013-04-27T11:47:54.347 に答える