3

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初始化那些变量?

4

1 回答 1

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().

于 2017-10-08T14:09:08.580 回答