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,
    }
}

当我使用 class 创建此 class 的实例时:

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

任务名称为空,优先级是 Task.Priority 枚举中可用的最低数字,而不是所选数字(高)。

为什么 Activator.CreateInstance 不初始化这些变量?

您正在重新声明子class 中的变量(通过 new 关键字),这为您提供了一组不同于 Task class.相反,您应该直接从 Remember class.

的构造函数中设置 Task 变量
namespace Tasks
{
    public class Remember : Task
    {
        public Remember()
        {
            name = typeof(Remember).Name;
            priority = Task.Priority.High;
        }
    }
}

正如其他人所指出的,这与 Activator.CreateInstance 无关。当您使用 new Remember().

时,您会得到相同的行为