一、泛型集合:
List<T>是泛型集合,就是为了专门处理某种类型。ArrayList对应的是List<类型>。在尖括号中写什么类型,这个集合就变成了什么类型的集合。
例子:
//随机往这个List集合中 添加十个数字,不能重复,求和,求最大值,求最小值,求平均值
List<int> list = new List<int>();
Random r = new Random();
int num = 0;
while (list.Count != 10)
{
num = r.Next(1, 100);
if (!list.Contains(num))
{
list.Add(num);
}
}
Console.WriteLine("最大值:{0}", list.Max());
Console.WriteLine("最小值:{0}", list.Min());
Console.WriteLine("和为{0}", list.Sum());
Console.WriteLine("平均值{0}", list.Average());
Console.ReadKey();
List<string> listStr = new List<string>();
listStr.Add("哈哈,小杨又帅了");
二、Dictionary
Dictionary<TKey,TValue>,默认提供命名空间。Hashtable对应的是Dictionary<键的类型,值的类型>。在尖括号中填入键的类型与值的类型,那么这个集合就变成了一个指定的键值对模型。其使用方式与Hashtable一样。
例子:
Dictionary<string, string> dic = new Dictionary<string, string>();
//和哈希表很像,也是无序的
dic.Add("老苏", "凤姐");
dic.Add("老牛", "芙蓉");
dic.Add("老马", "春哥");
dic.Add("老虎", "曾哥");
dic.Add("老蒋", "小月月");
foreach (string item in dic.Keys)
{
Console.WriteLine("key---:{0},value---:{1}",item,dic[item]);
}
Console.ReadKey();
三、目录管理(Directory类):
基本操作:创建、移动和删除的功能。
命名空间System.IO
常用方法:
CreateDirectory()
-Move()
-Delete()
-Exist()
比较ArrayList,Hashtable,List,Dictionary的异同:
四、文件管理
文件管理:File类
基本操作:判存,复制,移动,删除
命名空间System.IO
基本方法:
File.Exist();//判断文件是否存在
File.Copy(“source”,“targetFileName”,true);//文件拷贝,true表示当文件存在时“覆盖”,如果不加true,则文件存在报异常。
File.Move(“source”,“target”);//移动(剪切)
File.Delete(“path”);//删除
File.Creat(‘“path”)//创建文件
File.ReadAllLines(“path”, Encoding.Default);//读取所有行,返回string[]
File.ReadAllText(“path”, Encoding.Default);//读取所有文本返回string
File.ReadAllBytes(“path”);//读取文件,返回byte[],把文件作为二进制来处理。
File.WriteAllLines(“path”, new string[4] ,Encoding.Default);//将string数组按行写入文件。
File.WriteAllText(“path”, “string”);//将字符串全部写入文件
File.WriteAllBytes(“path”,new byte[5]);//将byte[]全部写入到文件
File.AppendAllText()//将string追加到文件
文件流:FileStream类
命名空间System.IO
基本方法:
FileStream fs=File.Open(); //返回FileStream
FileStream fs=File.OpenRead();//返回只读的FileStream
FileStream fs=File.OpenWrite();//返回只写的FileStream
FileStream fs=new FileStream(参数);
五、多态
多态就是对象可以表现多个类型的能力。
子类可以有与父类方法名相同的方法:
----签名不同(重载)
----签名相同(隐藏基类方法)
子类可以重写父类方法:
--虚方法
--重写方法
--重写基类方法一样可以调用基类方法
抽象方法与抽象类:
抽象类与抽象方法由abstract修饰,abstract的使用注意:
抽象方法没有方法体;抽象成员只能存在于抽象类中;抽象类可以有非抽象成员;抽象类的派生类必须实现抽象方法体;抽象类只能用作基类,无法实例化。
虚方法:
用virtual修饰的方法叫做虚方法。虚方法可以在子类中通过override关键字来重写
常见的虚方法:ToString() Equals
六、接口:
1、定义:interface关键字,接口只有方法、属性、索引和事件的声明。
接口的名称通常以“I”开头,如IList。接口是用来实现的,所有成员默认为public。
如果一个类即继承了类又实现了接口,那么类必须写在前面。一个类只能继承一个父类,但可以实现多个接口。
C#中的常用接口:IList,IComparable,IComparer, IEnumerable,IEnumerator,ICollection,IDictionary等等。
2、语法:
[访问修饰符] interface 接口名
{
// 接口成员定义
}
Interface IfFly
{
void IFly();
}
3、
比较C#中的接口和类的异同:
不同点:
不能直接实例化接口。
接口不包含方法的实现。
接口可以多继承,类只能单继承。
类定义可在不同的源文件之间进行拆分。
相同点:
接口、类和结构都可以从多个接口继承。
接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。
接口和类都可以包含事件、索引器、方法和属性。
4、比较abstract class和interface有什么区别?
相同点:
都不能被直接实例化,都可以通过继承实现其抽象方法。
不同点:
接口支持多继承;抽象类不能实现多继承。
接口只能定义行为;抽象类既可以定义行为,还可能提供实现。
接口可以用于支持回调(CallBack);抽象类不能实现回调,因为继承不支持。
接口只包含方法(Method)、属性(Property)、索引器(Index)、事件(Event)的签名,但不能定义字段和包含实现的方法;
抽象类可以定义字段、属性、包含有实现的方法。
接口可以作用于值类型(Struct)和引用类型(Class);抽象类只能作用于引用类型。例如,Struct就可以继承接口,而不能继承类。
加分的补充回答:讲设计模式的时候SettingsProvider的例子。