为什么可以在c#中编写抽象类的构造函数? 据我所知,我们不能实例化一个抽象类..那它是干什么用的呢? 你不能实例化类,对吧?
当前回答
抽象类可以有需要初始化的成员变量,因此可以在抽象类构造函数中初始化它们,并且在派生类对象初始化时调用该构造函数。
其他回答
因为在抽象类中可能有一种标准的方法来实例化数据。这样,就可以让继承自该类的类调用基构造函数。
public abstract class A{
private string data;
protected A(string myString){
data = myString;
}
}
public class B : A {
B(string myString) : base(myString){}
}
你完全正确。我们不能实例化一个抽象类,因为抽象方法没有任何主体,即抽象方法不可能实现。但在某些情况下,你可能需要初始化基类的一些变量。 你可以通过使用@Rodrick建议的base关键字来做到这一点。在这种情况下,我们需要在抽象类中使用构造函数。
关于抽象类的要点
抽象类不能被实例化。 抽象类可以有构造函数和析构函数。 抽象类不能是密封类,因为密封 修饰符阻止类被继承。 抽象类包含抽象成员和非抽象成员。 抽象类成员可以是私有的、受保护的和内部的。 抽象成员不能拥有私有访问修饰符。 抽象成员是隐式的虚成员,必须由 非抽象派生类。
它的存在是为了执行抽象类的所有实现所需要的一些初始化逻辑,或者在抽象类上实现的任何方法(并不是抽象类上的所有方法都必须是抽象的,有些方法可以实现)。
任何继承自抽象基类的类都必须调用基构造函数。
下面有两个重要的特性可以防止继承Abstract类
抽象类必须有抽象方法,否则就不是抽象类 抽象类必须被派生类继承,因此,如果一个类被其他类继承,那么用什么来创建该类的对象
推荐文章
- Linq-to-Entities Join vs GroupJoin
- 为什么字符串类型的默认值是null而不是空字符串?
- 在list中获取不同值的列表
- 组合框:向项目添加文本和值(无绑定源)
- 如何为ASP.net/C#应用程序配置文件值中的值添加&号
- 从System.Drawing.Bitmap中加载WPF BitmapImage
- 如何找出一个文件存在于c# / .NET?
- 为什么更快地检查字典是否包含键,而不是捕捉异常,以防它不?
- [DataContract]的命名空间
- string. isnullorempty (string) vs. string. isnullowhitespace (string)
- 完全外部连接
- 在foreach循环中编辑字典值
- 如何在xml文档中引用泛型类和方法
- 使用System.IO.Compression在内存中创建ZIP存档
- 从HttpResponseMessage获取内容/消息