c#Activator.CreateInstance不初始化变量

时间:2017-10-08 14:01:16

标签: c# .net createinstance

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

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

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

1 个答案:

答案 0 :(得分: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()时会出现相同的行为。