拥有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
没有初始化这些变量?
答案 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()
时会出现相同的行为。