C# lesson4
一、数组
1、声明一个数组:
以下为定义一个整数类型的数组:
//方法一 int[] a={1,2,4} //方法二 int[] a=new int[3]; a[0]=1; a[1]=2; //方法三 int[] a=new int[3]{1,2,4}
二维数组:
int[] a={{1,2},{2,4},{3,4}}
2、数组操作
a、定位数组:
Console.WriteLine('数组元素为:'+a[i]);
b、添加删除:
ArrayList();
int[] a={1,2,5,22}; ArrayList list=new ArrayList(); //如int类型泛型: List<int> list=new List<int>(); foreach(var i in a){ list.Add(a); //将a添加到List中 应该传object 传值类型产生装箱(用泛型) }
泛型解决拆装箱问题:
如果有多重类型数据:
object[] oNum={12;"fg",1.5}
List<object> list=new List<object>();
c、指定位置添加删除
//List.RemoveAt(0);//删除第一个元素 删除索引所在元素 //List.Add(0);//在List的末尾添加0 //List.Insert(1, 5);//在索引值为1处插入5 在索引处插入 //List.Clear();//清除现有所有元素
d、哈希表:(按键值对的形式存储) //
Hashtable table =new Hashtable();
table.key1="aaa";
table.key2="bbb";
...
foreach(var key in table){
//遍历操作
}
哈希表的泛型:
二、面对对象的三大特征:
面对对象语言的三大特征:封装、继承、多态;
1、封装
a、访问修饰符:
public 当前命名空间下所有类 夸程序集也可以用(引用命名空间);
private 只能在当前类里面使用
protected 只能在当前类里面使用 但是能被继承/使用(能夸程序集)
internal 同一个命名空间下的所有类都可以用
protected internal 同一个命名空间下的所有类可用 夸程序集的子类可用
注:一个类不声明的话默认是internal 字段和方法默认是private;
如果类里面不去人为的写构造方法的话,那么实例化对象的时候,会调用默认的那个无参数构造方法;
如果类里面有人为的构造方法,则实例化对象的时候就会调用那个人为的构造方法;
如果人为的写一个有参数的构造方法,在实例化的时候调用无参数构造方法就会报错(可以加一个无参数构造方法解决);
2、继承
a、当一个类继承与另外一个类的时候,他可以继承到此类里面的所有方法(不能够继承构造方法)
若父类的成员是一个私有对象,子类也是继承了,但无访问权限;
b、当实例化一个子类对象的时候,首先是调用父类的对象方法,再调用子类的;
(子类与父类相同的方法时,隐藏用new,覆写用override)
c、A:B:C ==》 A:C 继承的传递性;
d、A:B,当A和B里有相同的方法时,调用的是子类的方法,(父类默认隐藏),当父类的方法设置为虚方法的时候,子类里面可以通过override对该方法进行覆写(调用时是调用子类);
e、Object类型是任何一种数据类型的父类,可以接收任何一种数据类型的值;
f、父类的变量可以接收子类的对象,反之不行;当父类和子类有相同的方法的时候,当父类的父类的方法被隐藏的时候,调用的是父类的方法;当方法被子类覆写的时候,调用的是子类的方法;
g、sealed 密封类 不能被继承(如果一个类不想被继承就 设置成密封类)
h、类是单继承;(一个类只能继承于一个)
3、多态
多态的意思是:方法名相同,方法不同;分为覆写和重载;(重载就是方法名相同,但是传的参数不同(个数、类型等),使一个方法有多种实现---重载方式)
静态方法不能被覆写;
三、其他:抽象类和接口
抽象类:加有abstract关键字的类
抽象类是必须有抽象方法(方法前加abstract)可以有非抽象成员;抽象方法必须在抽象类里面;
抽象类不能被实例化;
一旦一个类继承一个抽象类,那么这个类必须要实现这个抽象类里面的所有方法;
抽象类里面的所有成员可以设置任意一种访问修饰符;
接口:interface interface1 定义一个接口;
接口就是一种更加严格意义上的抽象类;(相当于在类和方法前面加了public abstract)
接口里面不能够有非抽象成员;
一个类继承于接口时,必须实现接口里面的所有方法;(与抽象类的继承不同,它不需要写override)
接口是多继承;
接口里面的所有内容都是public;
知识点总结: