C#3.0学习笔记(8)浅谈接口inte易做图ce
上篇:www.zzzyk.com/kf/201111/109744.html
1, 接口的定义?
答:接口表示一组函数成员而不实现成员的引用类型,类和结构可以实现接口。
2, 接口的意义及为什么要使用接口?
要理解接口的意义以及为什么它是有用的,让我们先来看看下面的代码,它接受了一个没有排序的整数数组并且按升序进行排序。
class Program
{
static voidMain(string[] args)
{
var myInt = new[] { 20,4,16,9,2};//隐式创建整形数组。
Array.Sort(myInt);//调用Array类的Sort方法对数组进行排序,默认为升序。
foreach (var item in myInt)//使用foreach语句遍历数组。
{
Console.Write("{0}",item);
Console.Write("");
}
Console.ReadKey();
}
}
程序输出结果为:
Sort方法在int数组上工作得很好,但是如果我们尝试在自己的类上使用会发生什么样的结果呢?如下代码所示:
class Program
{
static voidMain(string[] args)
{
var myInt=new []{20,4,16,9,2};//隐式创建整形数组。
MyClass[] mc=new MyClass[5];//创建MyClass对象数组。
for (int i = 0; i < 5; i++)//初始化数组
{
mc[i] = new MyClass();
mc[i].TheValue=myInt[i];
}
Array.Sort(mc);//调用Sort方法时会引发异常。
foreach (var item in mc)
{
Console.Write("{0}",item);
Console.Write("");
}
Console.ReadKey();
}
}
class MyClass//自定义类MyClass
{
public int TheValue;
}
程序会抛出一个异常,如下图:
这是什么原因呢?Sort不工作的原因是,对于用户自定义对象的数组而言,它不知道如何比较用户自定义对象和确定它们的次序,它需要数组中的对象实现IComparable接口。在Sort运行时,它通过调用元素的CompareTo方法并传入另外一个元素的引用作为参数来实现数组的一个元素和另一个元素的比较。
所以,我们可以通过让类实现IComparable接口来使Sort方法可以用于MyClass对象。
代码如下:
class Program
{
static voidMain(string[] args)
{
var myInt = new[] { 20,4,16,9,2};
MyClass[] mc = new MyClass[5]; //创建类MyClass对象的数组。
for (int i = 0; i < 5; i++) //初始化数组
{
mc[i] = new MyClass();
mc[i].TheValue=myInt[i];
}
PrintOut("原始数组顺序:", mc);//调用静态PrintOut方法输出初始数组。
Array.Sort(mc);
PrintOut("经过Sort后的顺序:", mc);//调用静态PrintOut方法输出排序后的数组。
Console.ReadKey();
}
static void PrintOut(string s, MyClass[] mc)//定义静态方法PrintOut实现遍历数组并输出数组元素。
{
Console.Write(s);
foreach (var item in mc)
{
Console.Write("{0}",item.TheValue);
&nb
补充:软件开发 , C# ,
上一个:C#3.0学习笔记(9)转换
下一个:一个结构体保存和窗口位置大小记录的类