Mul*_*der 193 c# constructor abstract-class
为什么可以在C#中为抽象类编写构造函数?
据我所知,我们无法实例化一个抽象类..那么它的用途是什么?
你无法实例化这个类,对吧?
Eri*_*ert 258
据我所知,我们无法实例化一个抽象类
那里有你的错误.当然,您可以实例化一个抽象类.
abstract class Animal {}
class Giraffe : Animal {}
...
Animal animal = new Giraffe();
Run Code Online (Sandbox Code Playgroud)
那里有一个动物实例.您通过创建一个从它派生的具体类来实例化一个抽象类,并实例化它.请记住,派生混凝土类的实例是也其抽象基类的一个实例. 即使动物是抽象的,长颈鹿的实例也是动物的实例.
鉴于您可以实例化一个抽象类,它需要像任何其他类一样具有构造函数,以确保满足其不变量.
现在,静态类是一个实际上无法实例化的类,您会注意到在静态类中创建实例构造函数是不合法的.
Cra*_*nec 245
因为可能有一种标准方法要在抽象类中实例化数据.这样,您可以从该类继承的类调用基础构造函数.
public abstract class A{
private string data;
protected A(string myString){
data = myString;
}
}
public class B : A {
B(string myString) : base(myString){}
}
Run Code Online (Sandbox Code Playgroud)
Rod*_*man 23
这是一种强制抽象类的一组不变量的方法.也就是说,无论子类做什么,您都希望确保基类的某些内容始终正确...示例:
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.
{ }
}
Run Code Online (Sandbox Code Playgroud)
不要将构造函数视为new
运算符的对偶.构造函数的唯一目的是确保在开始使用之前对象处于有效状态.恰好是我们通常通过new
运营商来称呼它.
添加以上答案和示例。
是的,抽象类可以有构造函数,即使抽象类无法实例化。将解释抽象类构造函数 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();
}
}
Run Code Online (Sandbox Code Playgroud)
输出将是
Abstract class constructor
Derived class constructor
Run Code Online (Sandbox Code Playgroud)
抽象类的要点
小智 5
它可以强制执行抽象类的所有实现所需的一些初始化逻辑,或者您在抽象类上实现的任何方法(并非抽象类中的所有方法都必须是抽象的,有些可以实现).
从您的抽象基类继承的任何类都必须调用基础构造函数.
归档时间: |
|
查看次数: |
156992 次 |
最近记录: |