1.属性
作用:1.校验数据的合法性
2.保护内部字段不被破坏(封装性)
3.属性是为了拦截字段
4.属性是为了拦截字段在赋值的时候,做一些操作来保护字段的合法性
实际上属性就是特殊的方法,因为属性内部提供了两个构造器
一个是set构造器,一个是get构造器
我们可以认为:
set构造器实际上就是一个方法而已,有参无返回值方法
value就是参数
get构造器也是方法,无参有返回值
属性的语法:
修饰符 + 数据类型(如果你有对应的字段,此时数据类型要和字段的类型保持一致) + 字段名(首字母大写)
{
//属性内部有两个构造器
set{}
//set:出现赋值运算的时候会调用set构造器
//get{}
//get:取值的时候会调用get构造器
//注意,属性的内部至少存在一个构造器
//如果只有set,没有get,该属性为只写
//如果只有get,没有set,该属性为只读
//区分调用set还是get
//是否产生赋值运算(就是看有没有等于号)是判断调用set还是get的依据
//属性实际上是特殊的方法
//set构造器,是有参数没有返回值的特殊方法,参数为系统关键字value
//get构造器,是无参数有返回值的特殊方法,返回的是字段
//需要注意的是属性不一定和字段是成对儿出现的,两者可以同时存在,
//当然也可以不同时存在
}
2.参数传递(实参-->形参)
第一种情况:值传递
值类型作为实参传递给形参的时候,传递的是值得本身,而不是值的地址.
代表:int float double bool struct enum等常见值类型
第二种情况:引用传递(地址传递)
引用类型作为实参传递给形参的时候,传递的是地址.
当然这里面string是一个特殊范例,string虽然本身为引用类型,但是
作为实参传递的时候,默认是值传递
代表:数组 对象
ref指针:
作用:将值传递改为地址传递
用途:如果你想改变一个值类型本身的值,那么在传递的时候需要加上ref
如果你在参数传递的时候,仅仅是为了运算不需要改变原值,那么不需要加上ref
out关键字:
作用:将某个值保存到一个变量中
用途:保存结果,实际上相当于函数有返回值.
3.内存分布
栈:栈区存储变量,比如int a = 10;
a变量存于栈,10存在常量区.
a实际上保存的是常量区10这个值所在的首地址
堆:一般用来存放对象信息(字段,属性,方法,索引器)
4.new关键字
new 一个类实例的时候,系统会在堆区开辟新的内存空间.
new 一个结构体实例的时候,系统不会在堆区开辟新的内存空间.
结构体适合小型数据结构,就是不需要耗费内存的那种,常用来做工具使用
比如说向量(x,y,z)
类适合大型数据结构,比如玩家类,需要常驻内存.
结构体不能被继承,但是类可以.