字符串加法运算
string s1 = "Hello", s2 = "world", res;
res = s1 + s2;
MessageBox.Show(res);
结果
Helloworld
string s1 = "1", s2 = "2", res;
res = s1 + s2;
MessageBox.Show(res);
结果
12
数组
数组的声明
需要用到new 关键字
//声明没有元素的数组
int[] ints=new int[10];
//声明初始化有元素的数组
int[] ints2=new int[] { 1, 3, 4, 5 };
//在声明初始化有元素的数组时,也可以指定数组大小
string[] strings = new string[5] {"1","2","3","4","5"};
转换
(int)5.21//输出5
Int.Parse():只支持String类型转成int,括号内必须是string类型
string st="5.21";
double n=5.21;
Int.Parse(st);//输出5
Int.Parse(n);//报错
Convert.ToInt32(double value),遵循四舍五入,但当value为两个整数中间的数时,返回两者中偶数。
Convert.ToInt32(null)会返回0而不产生任何异常,Int.Parse(null)会产生异常。
函数
参数修饰符//类似于c中形参实参
无修饰符:按值进行传递,一份副本。
out:输出参数由被调用的方法赋值,按引用传递。最大用途是用一次方法的传递可以获得多个返回值。
private void Form1_Load(object sender, EventArgs e)
{
string res=SellHouse(100, 100,out string wantprice);
MessageBox.Show(res);
MessageBox.Show(wantprice);
}
public string SellHouse(int area,int price,out string wantprice)
{
wantprice = "愿意出价" + (area * price - 1);
return "张三想买这套房" ;
}
张三想买这套房
愿意出价9999
ref:调用者赋初值,并且可以由被调用的方法可选的重新赋值(数据按引用传递),如果被调用的方法未能给ref参数赋值,也不会有编译器错误。
out和ref区别
out修饰的参数必须在方法内修改,ref也可以不修改。
out在传参时,参数是局部变量时可以不对其赋值,因为out一定会对参数赋值。
ref修饰的参数,在实参必须有初始值才能调用,因为ref不一定会对其进行赋值。
面向对象编程
一般思维为面向过程编程,但难以应对较为复杂的情况。
类:造车的图纸 对象:图纸造出来的车
属性:通常为具备的特征 方法:通常为行为,动词
声明一个类需要用到class关键字。
属性在c#中较为独特,它既不同于方法,也不同于字段。
属性最常见写法:public int Age{get;set;} 若属性中有get关键字,说明可以获取该属性的值;若属性中有set关键字,说明可以向该属性设置值。
在C#中万物皆对象,string person=new Person() ×; string本身也是一个类,应当用Person类型去定义一个变量才能去接受Person类型,Person person=new Person() √;
访问修饰符
静态的属性方法通过static关键字修饰,静态的属性可以通过类型直接获取,非静态必须通过实例化对象获取。
一般情况类型无需静态修饰,只有当类型中存在拓展方法才需要。(了解即可)
ArrayList(集合)
是.Net FrameWork提供的用于数据存储和检索的专用类,是命名空间System.Collections下的一部分。
ArrayList的大小是按照其中存储的数据来进行动态扩充和收缩的,故在声明ArrayList时不需要指定他的长度,可以很方便的进行数据添加、插入和移除。
ArrayList arrayList= new ArrayList();
//将数据新增到集合结尾处
arrayList.Add("abc");
arrayList.Add(123);
//修改指定索引处的数据
arrayList[2] = 345;
//移除指定索引处的数据
arrayList.RemoveAt(0);
//移除内容为123的数据
arrayList.Remove(123);
//在指定索引处插入数值
arrayList.Insert(0, "hello world");
ArrayList劣势
在存储数据时使用object类型 (所有的类的父类,父类可以接收子类的数据)。
不是类型安全的,使用时很可能会出现类型不匹配的错误。
就算都有插入同一类型的数据,但在使用时候,我们也需要将它们转化为对应的原类型来处理。
其存储存在装箱和拆箱操作,导致其性能低下。
装箱与拆箱的概念
装箱就是将比如int类型或string等不同的对象通过隐式转换赋给object对象。
int i = 123;
object o = i;
拆箱就是将object对象通过显式转换赋给int类型的变量。
object o =123;
int i =(int)o ;
装箱与拆箱过程会产生较多的性能损耗,正式因为ArrayList存在不安全类型与装箱拆箱的缺点,所以在C#2.0后出现了泛型的概念。(限制集合只能存储单一类型数据的一种手段)