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()
.
时,您会得到相同的行为
有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()
.