为什么可以在C#中为抽象类编写构造函数?
据我所知,我们不能实例化一个抽象类..那么它是用来做什么的呢?
你不能实例化这个类,对吧?
发布于 2011-04-09 07:33:24
因为可能有一种标准的方法来实例化抽象类中的数据。这样,您就可以让从该类继承的类调用基构造器。
public abstract class A{
private string data;
protected A(string myString){
data = myString;
}
}
public class B : A {
B(string myString) : base(myString){}
}
发布于 2011-04-09 09:25:11
据我所知,我们不能实例化一个抽象类
这就是你的错误所在。
当然,您可以实例化一个抽象类。
abstract class Animal {}
class Giraffe : Animal {}
...
Animal animal = new Giraffe();
这里有一个Animal的实例。通过从抽象类派生一个具体类并实例化它,可以实例化一个抽象类。请记住,派生的具体类的实例是
还有
其抽象基类的实例。
长颈鹿的实例也是动物的实例,即使动物是抽象的。
假设您可以实例化一个抽象类,那么它需要像任何其他类一样拥有一个构造函数,以确保满足其不变量。
现在,一个静态类实际上是不能实例化的类,您会注意到在静态类中创建实例构造函数是不合法的。
发布于 2011-04-09 07:34:43
这是一种强制执行抽象类的一组不变量的方法。也就是说,无论子类做什么,您都要确保基类的某些内容总是正确的……示例:
abstract class Foo
{
public DateTime TimeCreated {get; private set;}
protected Foo()
{
this.TimeCreated = DateTime.Now;
}
}
abstract class Bar : Foo
{
public Bar() : base() //Bar's constructor's must call Foo's parameterless constructor.
{ }
}
不要将构造函数视为new运算符。构造函数的唯一目的是确保您在开始使用对象之前拥有一个处于有效状态的对象。只是碰巧我们
通常通过new运算符。
https://stackoverflow.com/questions/5601777
复制相似问题