文章目录
1.值类型与引用类型的区别
int是值类型,特点是“除非赋值,否则两者毫不相干”
int a = 60;
int b = a;
a = 80;
MessageBox.Show("a:" + a. ToString());
MessageBox.Show("b:" + b.ToString());
输出结果:b = 60; a = 80(a!=b)
动态数组ArrayList是引用类型,一个引用类型指向一个内存数据。若多个引用类型都指向同一个内存数据,那么其中一个引用类型发生了改变,其余的引用类型都要随之改变。
ArrayList a = new ArrayList(); //定义了个引用类型a,指向一个内存数据
a.Add(1);
a.Add(5);
ArrayList b = a; //定义了个引用类型b,但是把a赋给了b,所以现在引用类型b与a都指向了同一个内存数据
a[0] = 4; //引用类型a发生了改变
MessageBox.Show("a[0]:" + a[0].ToString());
MessageBox.Show("b[0]:" + b[0].ToString()); //a发生了改变,所以b也要改变,b[0] = a[0] = 4
MessageBox.Show("b[1]:" + b[1].ToString()); //b[1]还是等于a[1] = 5
输出结果:a[0] = 4; b[0] = 4(a[0]!=b[0]) b[1] = 5
2.传值和传址
(一)传值——值类型变量int char等
这类变量在调用函数时相当于复制实参的值到型参,函数内型参的变化和实参毫无关系
private void Button1_Click(object sender, EventArgs e)
{
int a = 5;
int b = 7;
int c = 8;//实参c的值为8
toge(a, b, c);//把实参a, b, c的值复制一份给形参a, b, c
MessageBox.Show("函数外的c值为:"+c.ToString());//形参的改变不影响实参
}
void toge(int a, int b, int c)//将实参a, b, c的值复制到型参的a, b, c中
{
c = a + b;//形参c的值改变
MessageBox.Show("函数内的c值为:"+c.ToString());
}
结果为:函数内的c值为:12 函数外的c值为:8
(二)传址——引用类型变量int [], Arraylist等
这类·变量在调用函数时是传递实参的地址给型参,这样形参改变,实参会随之改变
private void Button2_Click(object sender, EventArgs e)
{
int[] ay = new int[] {
2, 3, 5 };
aya(ay);//把数组ay的地址传递给形参
MessageBox.Show("函数外ay[1]值为:" + ay[1].ToString());
}
void aya(int []ay)
{
ay[1] = 8;//形参ay[1]改变,由于地址关联所以对应实参ay[1]的值也要改变
MessageBox.Show("函数内ay[1]值为:" + ay[1].ToString());
}
结果为:函数内ay[1]的值为:8 函数外ay[1]的值为:8
(三)传址——值类型变量int char等
原本值类型只能传值不能传址,但是调用函数的形参和实参前面都加上ref就可以对该变量传址
private void Button3_Click(object sender, EventArgs e)
{
char a = 'a';
char b = 'b';
int c = 'a' + 'b';
sayo(a, b, ref c);
//把实参a, b的值复制一份给形参a, b;实参c前面加上ref就把c的地址传递给形参c
MessageBox.Show("函数外的c值为:" + c.ToString());
}
void sayo(char a, char b, ref int c)//形参c前面加上ref
{
c = a + b - 1;//形参c的值改变,由于加了ref所以实参的c也会改变
MessageBox.Show("函数内的c值为:" + c.ToString());
}
结果为:函数外的c值为:194 函数内的c值为:194
(四)ref和out的区别
值类型变量在调用函数时,在形参和实参前加上ref或者out都可以将该值类型变量转换为引用类型变量,不用ref和out又有所不同:
1、调用前赋值
ref作为参数的函数在调用前,实参必须赋初始值。
out作为参数的函数在调用前,实参可以不赋初始值。
2、函数中,参数赋值
在调用函数中,out引入的参数必须赋值;
而ref引入的参数在返回前可以不赋值;
比较完整的代码为:
3.初始化字符串string
C#中初始化字符串的代码为string a = "abc";
类似于C语言中的char a[] = "abc";
4.输出字符串MessageBox.Show(“字符串”+a);
string a = "abc";
MessageBox.Show("a = "+a);
输出结果为:a = abc
当然也可以不加字符串,直接调用字符串然后输出
string a = "abc";
MessageBox.Show(a); //省去了加号+,后面的输出单个字符也可以这样做
输出结果为:abc
MessageBox.Show( )也可以输出单个字符,不过括号里面要加上一个函数.ToString()
.ToString()将单个字符转换为字符串形式
string a = "abc";
int f = 'a';
MessageBox.Show("a = "+a);
MessageBox.Show("f = "+f.Tostring());
输出结果为:a = abc f = 98
5.连接两个字符串;两个字符;字符与字符串“+”
连接两个字符串
string a = "Hello";
string b = " World";
string c = a + b;
MessageBox.Show(c);
输出结果:Hello World
连接两个字符
int a = 'a';
int b = 'b';
int c = a + b;
MessageBox.Show(c.ToString());
输出结果为:175 两个字符相连,仍然是一个字符
连接字符与字符串
string a = "Hello";
int b = 'b';
string c = a + b;
MessageBox.Show(c);
输出结果为:Hello98 字符与字符串相连,结果是一个字符串
6.bool类型
一个条件语句可以被赋给一个bool类型的变量,若条件语句结果为真,则变量的返回值为True;反之若条件语句结果为假,则变量的返回值为False。
bool类型变量的返回值为单个字符类型
int a = 100;
int b = 120;
bool c = a < b; //可替换为 a > b
if(c)
{
MessageBox.Show("c = " + c.ToString());
}
else
{
MessageBox.Show("c = " + c.ToString());
}
当a < b时,条件语句为假,输出结果:c = False
当a > b时,条件语句为真,输出结果:c = True
7.is运算符: bool a = ‘operand’ is ‘type’;
is运算符是可以检查对象是否是给定的类型,或者是否可以转换为给定的类型。如果是,这个运算符就返回True;如果不是,这个运算符就返回False.
-
如果type是一个类类型,而operand也是该类型,或者它继承了该类型,或者它封箱到该类型中,则结果为true。
-
如果type是一个接口类型,而operand也是该类型,或者它实现了该接口的类型,则结果为true。
-
如果type是一个值类型,而operand也是该类型,或者它被拆箱到该类型中,则结果为true。
int a = 100;
int b = 120;
bool c = a is double; //若改成a is int会怎样
if(c)
{
MessageBox.Show("Yes, you're right!");
}
else
{
MessageBox.Show("No, you're wrong!");
}
MessageBox.Show(c.ToString());
a是int类型,不是double类型,故输出结果为:No, you’re wrong! False
若改成了a is int,则输出结果为:Yes, you’re right! True
8.数组的初始化
数组可以理解为同一类型的变量按照行、列组合在一起的集合。数组和字符串在C语言里性质是差不多的(字符串又叫做字符数组),字符串是char str[12];
,数组是int str[12];
int str[2][3];
(一)一维数组
方法一
int []ay = new int[3];
ay[0] = 12;
ay[1] = 14;
ay[2] = 16;
方法二:
int []ay = new int[]{
12, 14, 16};
(二)二维数组
int [,]ay = new int[2,2];
ay[0,0] = 10;
ay[0,1] = 12;
ay[1,0] = 14;
ay[1,1] = 16;
9.字典Dictionary<key, value>
(一)初始化和删除
Dictionary<string, double> data = new Dictionary<string, double>();
data [ "圆周率" ] = 3.141593;
data["第一"] = 1.423;<