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初始化那些变量呢?
您正在重新声明子类中的变量(通过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().