c#Activator.CreateInstance不初始化变量
有c#Activator.CreateInstance不初始化变量,c#,.net,createinstance,C#,.net,Createinstance,有记住.cs: namespace Tasks { public class Remember : Task { new public string name = typeof(Remember).Name; new public Task.Priority priority = Task.Priority.High; } } public abstract class Task { public string name;
记住.cs
:
namespace Tasks
{
public class Remember : Task
{
new public string name = typeof(Remember).Name;
new public Task.Priority priority = Task.Priority.High;
}
}
public abstract class Task
{
public string name;
public Task.Priority priority = Task.Priority.Low;
public enum Priority
{
High = 3,
Medium = 2,
Low = 1,
}
}
Task.cs
:
namespace Tasks
{
public class Remember : Task
{
new public string name = typeof(Remember).Name;
new public Task.Priority priority = Task.Priority.High;
}
}
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
enum中可用的最低数字,而不是所选数字(高)
为什么
Activator.CreateInstance
不初始化这些变量?您正在子类中声明变量(通过new
关键字),这将为您提供一组独立于任务的变量。相反,您应该直接从记住类的构造函数中设置任务变量
namespace Tasks
{
public class Remember : Task
{
public Remember()
{
name = typeof(Remember).Name;
priority = Task.Priority.High;
}
}
}
正如其他人指出的,这与Activator.CreateInstance
无关。当您使用new memory()
时,您会得到相同的行为。您为什么认为这与Activator.CreateInstance
有关?您应该在Task=new memory()中看到同样的情况代码>?