▷ 静态构造函数
1> 可以与一般构造函数共存,使用static修饰,没有public修饰表明 "静态构造函数不会被继承 "
那一般的构造函数能够被继承吗?
using System;
namespace day1214
{
class A
{
public A()
{
Console.WriteLine("public A");
}
}
class B : A
{
}
class Program
{
static void Main(string[] args)
{
B b1 = new B();
}
}
}
//输出:public A
2> 静态构造函数在类 "第一次" 被使用时调用 "一次" ,以后均不会调用,在静态构造函数中 (只) 可以初始化静态成员;
using System;
namespace day1214
{
class A
{
//测试是否支持默认参数
public A(int a = 0)
{
Console.WriteLine("public A");
}
static A()
{
Console.WriteLine("static A");
//只初始化静态成员
}
public int data1 = 10;
public static int data2 = 20;
}
class B : A
{
}
class Program
{
static void Main(string[] args)
{
B b1 = new B();
B b2 = new B();
A a1 = new A();
}
}
}
//输出结果
static A
public A
public A
public A
//这里还可以看出,C#中类的构造函数支持默认参数(Kotlin也支持,Java不支持)
3> 静态构造函数中不允许使用参数
普通构造函数传入参数后被继承时,如何在派生类构造函数中初始化基类构造函数?
using System;
namespace day1214
{
class A
{
public A(int a = 0)
{
Console.WriteLine("public A");
}
static A()
{
Console.WriteLine("static A");
//只初始化静态成员
}
public int data1 = 10;
public static int data2 = 20;
}
class B : A
{
public B(int a,int b) : base(a)
{
data3 = b;
}
public int data3 = 30;
}
class Program
{
static void Main(string[] args)
{
B b1 = new B();
B b2 = new B();
A a1 = new A();
}
}
}