0
点赞
收藏
分享

微信扫一扫

第八章 理解值和引用

8.1 复制值类型的变量和类

*大多数基本数据类型都是值类型,字符串string除外;string是类类型,string实际是System.string的缩写;

*类是引用类型,声明类变量时,编译器分配一小块内存存储类的引用地址,使用new关键字创建类实例时,才在堆中分配一块内存。

*值类型的复制是两个内存块的值都容纳相同的数值,引用类型的复制,复制的只是类的引用地址,两个类变量存储的都是对同一个类对象的引用;

*引用类型的复制与私有数据:类变量的复制只能拷贝类对象的引用,称为浅拷贝;创建两个类实例,使用clone方法能够复制引用的对象,称为深拷贝。

*private关键字创建了不能从类外访问的字段或方法,但并不是说它只能由单个类对象访问,同一个类的不同对象可以互相访问私有数据;私有指的是在类别上的私有,而不是对象上的私有。

*static关键字声明类中的字段为静态字段,所有的类的对象都共享同一个数据。

*使用值类型的参数,将值类型实参传递给方法的行参,方法操作的是对实参的拷贝,对实参原始值无影响

*使用引用类型的参数,将引用类型的实参传递给方法,方法操作的是对实参的拷贝,这个拷贝是对引用类型对象的引用的拷贝,所有的操作都会你映射到引用对象本身。

8.2理解null和可空类型

*变量应在声明时初始化,引用类型的变量可以在初始化时赋值为null,不指向任何引用对象

Circle c = new Circle(42);
Circle cope = null;
copy = c;

*空条件操作符 ?

int ? i = null;
int j = 99;
i = j;//将实参赋值给空变量
j = i//错误

*可空变量i不能作为实参传递

*可空类型有两个属性,hasValue和Value

int ? i = null;
if (!i.hasValue)
{
	i = 99;
}
else
{
	console.Write(i.Value)
}

*可空类型的Value属性是只读的,不可赋值。

8.3 使用ref和out参数

*向方法传递实参时,形参会用实参的拷贝来初始化,不管是值类型、引用类型(会改变引用对象本身的值,但不改为引用其他对象)还是可空类型,方法内部对形参的操作不会影响实参的原始值。

static void Add(int para)
{
	para++;
  Console.Write();
}
static void main()
{
	int i = 42;
  Add(i);//输出43
  Console.Write(i);//输出42
}

*想要实际的修改一个实参,可使用关键字ref和out

*方法的形参前加ref前缀,作为传递的实参前也加ref前缀,作用于参数的所有操作都会作用于实参本身,因为形参和实参引用的是同一个对象

static void Add(ref int para)
{
	para++;
}
static void main()
{
	int i = 42;
  Add(ref i);
  Console.Write(i);//输出43
}

*由方法本身初始化形参,向形参传递为被初始化的实参,可使用out关键字

static void Add(out int para)
{
	para=42;
}
static void main()
{
	int i;//未初始化
  Add(out i);//初始化
  Console.Write(i);//输出42
}

//ref和out关键字,类似于PLC中自定义功能块的输入管脚和输出管脚,必须填写变量,直接更改实参本身。

举报

相关推荐

第八章总结

第八章(类和对象)

第八章·Io流

第八章 JAVA作业

第八章 结构体

第八章 IO库

0 条评论