c#Activator.CreateInstance不初始化变量

Fra*_*ale 3 .net c# createinstance

拥有Remember.cs:

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

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,
    }
}
Run Code Online (Sandbox Code Playgroud)

当我使用以下方法创建此类的实例时:

Task task = (Task)Activator.CreateInstance(typeof(Remember));
Debug.Log(task.name + " - " + task.priority);
Run Code Online (Sandbox Code Playgroud)

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

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

Nig*_*888 8

您正在重新声明子类中的变量(通过new关键字),这会为您提供一个比您的Task类更多的变量.相反,您应该Task直接从Remember类的构造函数设置变量.

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

正如其他人所指出的那样,这与此毫无关系Activator.CreateInstance.使用时会出现相同的行为new Remember().