【发布时间】:2014-03-03 15:01:58
【问题描述】:
我从 ReSharper 收到一条警告消息,指出 Classification = new T(); 上的“构造函数中的虚拟成员调用”:
public abstract class Creature<T> where T : new() {
protected Creature()
{
Classification = new T();
}
public abstract T Classification { get; protected set; }
}
public class Dog : Creature<Animal>
{
public override Animal Classification { get; protected set; }
}
public class Animal{
public void AnimalSpecificMethod() { }
}
我该如何解决这个问题?也许是重新设计这个结构的想法?
我想要实现的是在 Dog 类中创建相同的类类型,其中包含通过 Creature 类声明的分类。
谢谢!
【问题讨论】:
-
分类属性真的需要抽象吗?你会在 getter 和 setter 中做任何特定的事情吗?如果不是,就让它成为非抽象的(非虚拟的)。
-
警告是因为您在派生类被构造之前调用了派生类的方法......它可能会让您对异常开放,因为派生类的属性尚未初始化。最简单的就是创建一个init函数
-
自动实现的属性是邪恶的?
标签: c#