为什么可以在c#中编写抽象类的构造函数? 据我所知,我们不能实例化一个抽象类..那它是干什么用的呢? 你不能实例化类,对吧?
当前回答
关于抽象类的要点
抽象类不能被实例化。 抽象类可以有构造函数和析构函数。 抽象类不能是密封类,因为密封 修饰符阻止类被继承。 抽象类包含抽象成员和非抽象成员。 抽象类成员可以是私有的、受保护的和内部的。 抽象成员不能拥有私有访问修饰符。 抽象成员是隐式的虚成员,必须由 非抽象派生类。
其他回答
我也想在抽象的表面上发光 所有的答案几乎涵盖了所有的事情。还是我的小钱
抽象类是有一些例外的普通类
该类的任何客户端/消费者都不能创建该类的对象 类,这并不意味着它的构造函数永远不会调用。它的派生类可以选择调用哪个构造函数。(如某些回答所描述) 它可能具有抽象的功能。
加上上面的答案和例子。
是的,抽象类可以有构造函数,即使抽象类不能被实例化。将解释一个抽象类构造函数c#代码示例。但是,下一个问题也会出现,如果我们不能实例化一个抽象类(使用new构造一个对象),那么抽象类中的构造函数是什么,或者为什么我们应该在抽象类中使用构造函数?
注意,当创建派生类的对象时,隐式调用抽象基类的构造函数,尽管我们不能实例化抽象类。例如,在程序中,如果创建派生类的对象,则抽象基类构造函数也将被调用。
这也是一个例子
例子
abstract class A
{
protected A() {Console.WriteLine("Abstract class constructor"); }
}
//Derived class
class B : A
{
public B() {Console.WriteLine("Derived class constructor"); }
}
class Program
{
static void Main(string[] args)
{
B obj = new B();
}
}
输出将是
Abstract class constructor
Derived class constructor
抽象类可以有需要初始化的成员变量,因此可以在抽象类构造函数中初始化它们,并且在派生类对象初始化时调用该构造函数。
你完全正确。我们不能实例化一个抽象类,因为抽象方法没有任何主体,即抽象方法不可能实现。但在某些情况下,你可能需要初始化基类的一些变量。 你可以通过使用@Rodrick建议的base关键字来做到这一点。在这种情况下,我们需要在抽象类中使用构造函数。
据我所知,我们不能实例化一个抽象类
这是你的误差。当然,您可以实例化一个抽象类。
abstract class Animal {}
class Giraffe : Animal {}
...
Animal animal = new Giraffe();
这里有一个动物的例子。通过创建从抽象类派生的具体类来实例化抽象类,然后实例化抽象类。请记住,派生的具体类的实例也是其抽象基类的实例。长颈鹿的实例也是动物的实例,即使动物是抽象的。
假设您可以实例化一个抽象类,它需要像任何其他类一样有一个构造函数,以确保它的不变量得到满足。
静态类是一个你实际上不能实例化的类,你会注意到在静态类中创建实例构造函数是不合法的。
推荐文章
- dynamic (c# 4)和var之间的区别是什么?
- Visual Studio: ContextSwitchDeadlock
- 返回文件在ASP。Net Core Web API
- 自定义HttpClient请求头
- 如果我使用OWIN Startup.cs类并将所有配置移动到那里,我是否需要一个Global.asax.cs文件?
- VS2013外部构建错误"error MSB4019: The imported project <path> was not found"
- 从另一个列表id中排序一个列表
- 等待一个无效的异步方法
- 无法加载文件或程序集…参数不正确
- c#中枚举中的方法
- 如何从字符串中删除新的行字符?
- 如何设置一个默认值与Html.TextBoxFor?
- 检查属性是否有属性
- 格式化XML字符串以打印友好的XML字符串
- __construct函数的作用是什么?