接口相当于没有方法实现的抽象类,接口方法不要加各种访问级别:例如public,private等。
跟随者杨老大,写了如下代码:
public interface Flyable
{
void fly();
}
public interface Runable
{
void run();
}
public class Bird:Flyable,Runable
{
#region Flyable 成员
public void fly()
{
Console.WriteLine("Little Bird is Flying.");
}
#endregion
#region Runable 成员
public void run()
{
Console.WriteLine("Little Bird is Running.");
}
#endregion
}
2.常用系统接口
using,实现了IDisposable接口的对象可以使用using进行资源声明,出了using的作用域以后自动调用Dispose方法。 Dispose和Close的区别:实现了IDisposable接口必须定义Dispose方法,但不一定有Close方法,很多Dispose的实现都是调用Close方法。SqlConnection Close以后还能重新Open,但是Dispose以后就不能再用。
用using最多的就是再与非托管代码的交道中,例如using(SqlConnection con=new SqlConnection()){ XXXXXXXX },省去了释放资源的代码,简洁了开发工作。
foreach:实现了IEnumerable接口的对象都可以使用foreach进行遍历。申明一个对象,并查看IEnumerable的定义,发现其有一个属性接口和两个方法接口,Current,MoveNext等。
3.列表ArrayList
ArrayList可以看做是动态的数组。Add、Clear、Contains、Count、Remove、RemoveAt、ToArray(转换,再没关系)、索引器
C#中所有的数组类型int[]、string[]等都是继承自Array类。
这里跟随杨老大做了一个小题目,我知道这是他去Microsoft面试的一道小题目(看过杨老大《我的微软面试经历》的人都知道),就是一个奇偶分家的题目:有一个字符串是用空格分隔的一系列整数,写一个程序把其中的整数做如下重新排列打印出来:奇数显示在左侧、偶数显示在右侧。比如‘2 7 8 3 22 9’显示成‘7 3 9 2 8 22’。
最普通的解法:
#region ArrayList奇偶分家
int[] nums = { 3, 8, 11, 30, 55, 22 };
ArrayList list = new ArrayList();
foreach(int i in nums)
{
if(i%2==1)//奇数
{
list.Add(i);
}
}
foreach(int j in nums)
{
if(j%2==0)//偶数
{
list.Add(j);
}
}
foreach(int i in list)
{
Console.Write(i+",");
}
#endregion
当然,ArrayList还有许多美中不足的地方:数据放进去就不知道是什么类型的了;不能防止非法类型数据的放入;将ArrayList返回给其他函数,会令调用者很困惑。要区分变量、返回值类型和实际对象类型的区别。IntArrayList,StringArrayList又没完没了。因此,就出现了泛型List列表。
这里,跟随老大了解了集合,ArrayList、HashSet、Hashtable、Dictionary等都可以叫做集合类。实现了IEnumerable(getEnumerator())、IEnumerable<T>的接口都可以使用foreach进行遍历。
4.泛型 List/Dictionary