执行是从 main 函数开始,但如果在main函数前存在类对象变量的声明,则可能会先调用类的构造函数来创建类对象。
第一个问题,如果函数的调用语句在定义之前,则需要进行声明,告诉计算机这个程序中有这么一个函数。因为编译是从上至下进行编译的,如果函数的调用放在了这个函数定义之前(未经声明),在编译时就会报错。
如果要使用的函数的定义在它使用之前,则不用进行声明(因为此时编译器已经知道这是一个函数了)(但是一般程序员都会把主函数放在程序的最上面,这样可以让程序很直观,但这样做则需要将后面定义的函数先进行声明)。
第二个问题,其中函数什么时候需要声明,什么时候不需要声明,我在上一个问题中已经讲了。区分函数的定义和其声明有一种方法。
函数的声明一般只有一句话(比如: int sum (int i);),这句话其实就是函数的定义的首句话。而函数的定义则会在其后面添加该函数的内容(既大括号里的语句。如:int sum (int i) { .....})
另外,int sum (int i) { .....}这个并不是函数的调用,而是函数的定义。函数的调用这是这样的(就用程序中的sum做例子):sum(这里填写实参)。
顺序结构的程序是严格按照程序中代码的先后执行的;如果有选择结构,就会根据具体条件执行相应的代码。循环结构中也会有条件判断,会根据不同的情况执行不同的代码的。有的还有交互技术,会根据使用者的要求或是外界的情况作出响应的。比如说,自动驾驶系统,会根据路况的不同选择不同的驾驶方案,会自动避让障碍物,等等。
C# 类的初始化顺序继承类的static数据成员的初始化器,
继承类的static构造器 (在类名, 第一次被引用时, 调用, 如果, 没有这个构
造器, 则static数据成员何时被初始化, 是不可预测的)
继承类的实例型数据成员的初始化器
在执行继承类的构造器的内容之前
基类的static数据成员 的初始化器 即 static int a = 1
/// 类数据成员的定义
基类的static 构造器 ,(如果,基类的类名, 先于继承类被引用, 则先执行基
类的static构造器)
基类的实例型数据成员的初始化器
基类的构造器
接着执行继承类的构造器的内容
Example :
public class Base
{
A: private static int Number = 12
B: private int localNumner = 1
C: static Base()
{
///
}
D: public Base()
{
}
}
public class Child : Base
{
E: private static int ChildNumber = 14
F: private int local_child_number = 7
G: static Child()
{
///
}
H: public Child()
{
I: ///
}
}
Child child = new Child()
初始化顺序为
E G F H A C B D I
static构造器的调用时刻是, 第一次引用该类的类名
public class Test
{
static Test()
{
}
public staitc int Account
{
get
{
return 1
}
}
/// 只是举例
public static int GetAccount()
{
return 1
}
public class Nested
{
}
public delegate void Add()
}
当 X1: Test.Account()
X2: Test a = new Test()
X3: Test.GetAccount()
X4: Test.Nested p = new Test.Nested()
X5: Test.Add a = new Add(someMethods)
{ X1, X2, X3, X4, X5 }, 只要第一次出现其中的某一个就调用Test的
static构造器
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)