2017-10-08 16 views
3

Remember.csを持つ初期化しないC#のActivator.CreateInstanceはVARS

Task task = (Task)Activator.CreateInstance(typeof(Remember)); 
Debug.Log(task.name + " - " + task.priority); 

タスクの名前優先度が最も低い数値であるTask.Priority enum r選択されたものよりも高い(高い)。

なぜActivator.CreateInstanceはそれらのヴァールを初期化しませんか?

+2

これは 'Activator.CreateInstance'と何が関係していると思いますか? 'Task task = new Remember();'と同じことが分かります。 – hvd

答えて

8

サブクラスの変数をnewキーワードで再宣言しています。これにより、Taskクラスとは別の変数セットが得られます。代わりにTask変数をRememberクラスのコンストラクタから直接設定する必要があります。

namespace Tasks 
{ 
    public class Remember : Task 
    { 
     public Remember() 
     { 
      name = typeof(Remember).Name; 
      priority = Task.Priority.High; 
     } 
    } 
} 

他の人も指摘しているように、これはActivator.CreateInstanceとは関係ありません。 new Remember()を使用すると、同じ動作が発生します。

関連する問題