这两个类型相等么,为什么?Employee[] employees ,IList sortArraypublic void Sort(IList sortArray,Func comparison);这是方法而传的参数就是Employee[] employees类型运行无误static public void Sort(IList sortArray,Func comparison
来源:学生作业帮助网 编辑:作业帮 时间:2024/06/30 01:40:39
![这两个类型相等么,为什么?Employee[] employees ,IList sortArraypublic void Sort(IList sortArray,Func comparison);这是方法而传的参数就是Employee[] employees类型运行无误static public void Sort(IList sortArray,Func comparison](/uploads/image/z/13279489-25-9.jpg?t=%E8%BF%99%E4%B8%A4%E4%B8%AA%E7%B1%BB%E5%9E%8B%E7%9B%B8%E7%AD%89%E4%B9%88%2C%E4%B8%BA%E4%BB%80%E4%B9%88%3FEmployee%5B%5D+employees+%2CIList+sortArraypublic+void+Sort%28IList+sortArray%2CFunc+comparison%29%EF%BC%9B%E8%BF%99%E6%98%AF%E6%96%B9%E6%B3%95%E8%80%8C%E4%BC%A0%E7%9A%84%E5%8F%82%E6%95%B0%E5%B0%B1%E6%98%AFEmployee%5B%5D+employees%E7%B1%BB%E5%9E%8B%E8%BF%90%E8%A1%8C%E6%97%A0%E8%AF%AFstatic+public+void+Sort%28IList+sortArray%2CFunc+comparison)
这两个类型相等么,为什么?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)也行.
}