为什么可以在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类
抽象类必须有抽象方法,否则就不是抽象类 抽象类必须被派生类继承,因此,如果一个类被其他类继承,那么用什么来创建该类的对象
推荐文章
- 实体框架核心:在上一个操作完成之前,在此上下文中开始的第二个操作
- 如何为构造函数定制Visual Studio的私有字段生成快捷方式?
- 如何使用JSON确保字符串是有效的JSON。网
- AppSettings从.config文件中获取值
- 通过HttpClient向REST API发布一个空体
- 如何检查IEnumerable是否为空或空?
- 自动化invokerrequired代码模式
- 在c#代码中设置WPF文本框的背景颜色
- 在c#中,什么是单子?
- c#和Java中的泛型有什么不同?和模板在c++ ?
- c#线程安全快速(est)计数器
- 如何将此foreach代码转换为Parallel.ForEach?
- 如何分裂()一个分隔字符串到一个列表<字符串>
- 如何转换列表<字符串>列表<int>?
- c#对象列表,我如何得到一个属性的和