2017-10-08 59 views
3

Remember.csC#Activator.CreateInstance不初始化瓦爾

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

Task.cs

public abstract class Task 
{ 
    public string name; 
    public Task.Priority priority = Task.Priority.Low; 

    public enum Priority 
    { 
     High = 3, 
     Medium = 2, 
     Low = 1, 
    } 
} 

當我通過創建這個類的一個實例:

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

任務的名字爲空,優先級爲Task.Priority enum r中可用的最小編號ather比選定的一個(高)。

爲什麼Activator.CreateInstance不能初始化這些變量?

+2

是什麼讓你覺得這與Activator.CreateInstance有關?你應該看到'Task task = new Remember();'? – hvd

回答

8

您正在重新聲明子類中的變量(通過關鍵字new),該變量爲您提供了一組與您的Task類別不同的​​變量。相反,您應該直接從Remember類的構造函數中設置Task變量。

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

正如其他人所指出的,這已經無關Activator.CreateInstance。當您使用new Remember()時,您會得到相同的行爲。