c#面向对象基础小记

来源:互联网 发布:汽车加油行驶问题算法 编辑:程序博客网 时间:2024/06/03 17:32

一、关于值类型和引用类型

1、c#中,内置数据类型除了字符串(string)类型与对象(object)类型之外,其余都是值类型。按我的理解,给值类型赋值就是给值类型分配内存,用于存储该真实的数据;而引用类型赋值也是分配内存,只是该内存上储存的是对赋值数据的引用,真实的数据储存在其他的内存上面。例如:

int x=42,y=x;

Test t1 = new Test();

t1.a=42;

Test t2 = t1;

y=100;

t2.a=100;

最后输出的时候t1.a=t2.a=100;x=42;y=100

这就是值类型与引用类型的区别

 

二、访问修饰符

public:访问不受限制,可以类内和任何类外的代码中访问

protect:类内或者该类的派生类中

internal:类所在的程序中(同一命名空间内)

private:类内

 

类、结构或者数据类型未指定访问修饰符,那会指定默认的访问修饰符:

1.类或结构的默认访问类型是internal.

2.类中有的成员,默认均为private

 

三、参数传递

和值类型和引用类型相似,也分为值传递和引用传递

1、值传递

按值传递,就是调用的时候实参的类型是值类型(除string类型和object类型)

调用方法时,实参把值复制给形参,由于是值类型传递,所以形参和实参的数据分别存储在不同的内存上,所以形参端的变化不会造成实参端的变化,例如:

public void Swap(string s1,string s2)

{

    string s3 = s1; s1 = s2;s2= s3;

}

调用:

Swap("ab","dd");

并没有交换位置。

 

2、引用传递

相当于传递的是值的引用地址,形参实际上实参的一个别名,使用时实参和形参前均须使用关键字ref,例如:

public void Swap(ref string s1,string s2)

{

    string s3 = s1; s1 = s2;s2= s3;

}

调用:

Swap(ref "ab",ref "dd");

交换位置