这两个类型相等么,为什么?Employee[] employees ,IList sortArraypublic void Sort(IList sortArray,Func comparison);这是方法而传的参数就是Employee[] employees类型运行无误static public void Sort(IList sortArray,Func comparison
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/19 15:22:32
这两个类型相等么,为什么?Employee[] employees ,IList sortArraypublic void Sort(IList sortArray,Func comparison);这是方法而传的参数就是Employee[] employees类型运行无误static public void Sort(IList sortArray,Func comparison
这两个类型相等么,为什么?
Employee[] employees ,IList sortArray
public void Sort(IList sortArray,Func comparison);
这是方法而传的参数就是Employee[] employees类型运行无误
static public void Sort(IList sortArray,Func comparison)
{
bool swapped = true;
do
{
swapped = false;
for (int i = 0; i < sortArray.Count - 1; i++)
{
if (comparison(sortArray[i+1],sortArray[i]))
{
T temp = sortArray[i];
sortArray[i] = sortArray[i + 1];
sortArray[i + 1] = temp;
swapped = true;
}
}
} while (swapped);
这两个类型相等么,为什么?Employee[] employees ,IList sortArraypublic void Sort(IList sortArray,Func comparison);这是方法而传的参数就是Employee[] employees类型运行无误static public void Sort(IList sortArray,Func comparison
不等,前者是Array类型.C#里这样申明数组会派生一个继承自Array类的类!.
后者是IList泛型接口.
但是:employees is IList,这里的is是运算符,因为派生自Array类的类继承了IList接口!.
所以employees可以转换为IList,然后进行函数调用.
当然这里public void Sort(IList sortArray, Func comparison);是一个泛型方法.调用时T被自动识别为Employee.
例如:
interface A { void DoSth(); }
class B:A { void A.DoSth() { Console.WriteLine("B DoSth"); } }
static void MyFunc(A a) { a.DoSth(); }
static void Main()
{
B b=new B(); //B并不等于A,B是一个类,但是实现了A接口,A是一个接口
A a=(A)b; //因为B实现了A,所以b可以转换为一个A类型的实例,并赋值给a
MyFunc(a); //然后就可以调用参数类型为A的MyFunc了.直接这样:MyFunc(b)也行.
}