什么是方法? 就是c++中的函数。 就是一个代码块,能执行,能通过方法名进行调用。
本地变量,就是c++中的局部变量,在某个函数里面呢个生效。
字段和本地变量的区别? 1)自我理解,字段就是我们在主函数中,显式声明的变量,他的作用实际上就是c++中全局变量。本地变量,就是c++中的局部变量,在某一函数中声明使用。 2)生存期不同。字段从被声明开始,到不再被访问结束。本地变量从代码块中被声明开始,到代码块执行完结束。 3)默认初始化不同。字段可以被默认初始化成该类型的默认值。本地变量不能被默认初始化。 4)储存区域不同。字段是类的成员,储存在堆,不管是值类型还是引用类型。本地变量,值类型存储在栈,引用类型,引用储存在栈,数据储存在堆。
var的作用? var不是特定类型的符号。 是句法上的速记,提高变成速度的。 只要能从初始化语句的右边推断出类型就可以用var。
var的使用条件? 1)只能用于本地变量,不能用于字段。 2)变量声明时包含初始化才能用 3)编译器一旦推断出他的类型,那么就不能更改了。
//引入system命名空间 using System; //和程序名相同的命名空间 //在常见项目时就自动生成 namespace the_second_helloworld { //类program,在创建项目时自动生成 class Program { //主函数,程序执行的起点 static void Main(string[] args) { int a = 1; var b = 2; float c = 0.1F; var d = 0.2; Console.WriteLine(a); Console.WriteLine(b); Console.WriteLine(c); Console.WriteLine(d); } } } 运行结果: 1 2 0.1 0.2注意,在c++中可以先声明一个变量,然后在嵌套的代码块中在声明一个相同名字的变量。但是在c#中不可以。
const表示常量,常量是不能改变的值。
本地常量必须初始化。本地常量的初始化值在编译时就已经决定了。可以是null引用,不能是对象引用,因为对象的引用是在运行时决定的。
函数调用是怎么实现的? 1)当前程序的执行在调用点被挂起。 2)控制转移到被调用函数 3)被调用函数执行直到完毕 4)控制回到调用点继续执行
获取系统当前时间DateTime a = DateTime.Now ;
//引入system命名空间 using System; //和程序名相同的命名空间 //在常见项目时就自动生成 namespace the_second_helloworld { //类program,在创建项目时自动生成 class Program { //主函数,程序执行的起点 static void Main(string[] args) { //实例化 Program a = new Program(); //调用类的成员函数 a.Time(); } //声明一个私有函数 private void Time() { //获取当前时间 DateTime dt = DateTime.Now; //判断小时数 if(dt.Hour>=12) { Console.WriteLine("afternoon"); } else { Console.WriteLine("morning"); } } } } 运行结果: afternoon形参属于本地变量。声明在参数列表中,不在函数体中。 实参是,被初始化的形参。函数被调用的时候,形参被初始化,成为实参。
值参数 1)在栈为形参分配空间 2)将实参的值赋值给形参 值参数比一定是变量,也可以是表达式。比如(2+2)/2 书65页的5.12很重要,还不是很明白。
输出参数? 1)自己理解,就是在函数体内,改变形参,是的函数体外的实参随之改变。 2)为了将函数体内的数据,传到外面。用out修饰 3)在函数体内部,输出参数在被读取之前,必须被赋值。也就是说参数的初始值是什么无关紧要。在函数体之前,给实参赋值是没有必要的。 4)在函数体执行完毕前,所有的输出参数必须都被赋值才行。
参数数组 1)在一个参数列表中,只能有一个参数列表 2)如果有,必须是参数列表的最后一个 3)参数数组的元素,必须类型相同 4)用params修饰 5)数据类型后又[ ] 6)是引用类型,所以数据在堆
引用参数、输出参数,在声明和调用都需要修饰符。 参数数组声明需要修饰符,调用不用修饰符。 参数数组的传参过程 方法重载或者叫函数重载? 注意并不是指相同的函数名,不同的函数体。 指的是,相同的函数名,不同的函数签名。 什么叫不同的函数签名呢? 要么函数名不同,要么参数数目不同,要么参数类型和顺序不同,要么参数修饰符不同。
命名参数和位置参数有什么不同? 调用函数时,位置参数不用写形参名,但是实参的顺序排列不能错。 命名参数的顺序可以任意,但必须写明形参名。比如fun(a:1, b:2, c:3) ;
可选参数? 给形参一个默认值,那么就是可选参数了,类似于python。比如int Fun(int a, int b=3) ;
是不是所有类型都能做可选参数? 不是。 1)要求值类型的默认值,在编译的时候可以确定 2)要求引用类型默认值必须是null 3)可选参数,只能是值参数 4)如果有params参数,必须在可选参数之后
如果有多个可选参数,是不是可以缩编省略? 不是,只能从最后一个开始省略,知道第一个可选参数为止。因为随便省略,不知道省略的是哪几个,可能是开头几个,也可能是末尾几个。
什么是栈帧? 栈先进后出,最后出去的那部分,叫做栈帧。 栈帧保存和函数相关的数据。 包括返回地址(调用完毕后程序继续执行的位置)和参数分配的内存,以及其他(其他可以没有)