簡體   English   中英

c#Activator.CreateInstance不初始化變量

[英]c# Activator.CreateInstance does not initialize vars

Remember.cs

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

任務的名稱為null,優先級是Task.Priority枚舉中可用的最低編號,而不是選定的編號(高)。

為什么Activator.CreateInstance沒有初始化那些變量?

您正在重新聲明子類中的變量(通過new關鍵字),它為您提供了一個獨立的變量集,而不是您的Task類。 相反,您應該直接從Remember類的構造函數設置Task變量。

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

正如其他人所指出的,這與Activator.CreateInstance無關。 使用new Remember()時會出現相同的行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM