一:这里对泛型委托和泛型接口的理解有点生硬,我们直接根据代码分析:
首先定义一个泛型集合,首先要有一个类
public class Person {
private string name;
public string Name {
get { return name; }
set { name = value; }
}
private int age;
public int Age
{ get { return age; }
set { age = value; }
}
}
测试类:使用泛型委托
static void Main(string[] args)
{
List<Person> list=new List<Person>()
{
new Person(){Name = "张丽爱",Age = 200},
new Person(){Name = "李小龙",Age = 30},
new Person(){Name = "龙小李",Age = 40}
};
foreach (Person person in list)
{
Console.WriteLine(person.Age);
}
Console.WriteLine("排序后");
list.Sort(Comparison);
foreach (Person person in list)
{
Console.WriteLine(person.Age);
}
Console.ReadKey();
}
static int Comparison(Person x, Person y)/ // 泛型委托Comparison<Person>的实现方法;这里的Comparison是方法名,可以用别的方法名
{
int result = 0;
if (x.Age>y.Age)
{
result = 1;
}
if (x.Age<y.Age)
{
result = -1;
}
if (x.Age==y.Age)
{
result = 0;
}
return result;
}
}
测试类:IComparer<Person> (泛型接口的实现类)重写IComparer<Person> 中的Compare 方法
class Program
{
static void Main(string[] args)
{
List<Person> li = new List<Person>{
new Person(){Name="打啊",Age=35},
new Person(){Name="戴爱",Age=20}
};
foreach (Person item in li)
{
Console.WriteLine(item.Age);
}
//li.Sort(Comparison);
li.Sort(new Mycompare());
Console.WriteLine("排列后:");
foreach (Person item in li)
{
Console.WriteLine(item.Age);
}
li.Sort(new Mycompare());
foreach (Person item in li)
{
Console.WriteLine(item.Age);
}
}
public class Mycompare :IComparer<Person>
{
public int Compare(Person x, Person y)
{
int result = 0;
if (x.Age > y.Age)
{
result = 1;
}
if (x.Age == y.Age)
{ result = 0; }
if (x.Age < y.Age)
{ result = -1; }
return result; }
}
}
有以上代码,我们不难看出li.sort()的方法中分别是用实现IComparer<Person>泛型接口的实现类的Compare(Person x, Person y)【注意:x,y是要保持数据类型一致,一般情况是intde 】方法,或者是泛型委托Comparison<Person>的实现方法。
二:扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。
扩展类特点:1.类是静态的,2.方法是静态的,3.要有this关键字(this只是编译时的一个标示,运行时并不认识)
现在我们定义一个扩展类:
public static class StringExtend
{
//01.类是静态类
//02.方法是静态方法
//03.this关键字
public static string Rweilengdeyuhaoren(this string str)//没有实际意义,只是为了编译需要
{
return str + "今天的天气真好!";
}
}
测试类:
class Program
{
static void Main(string[] args)
{
string str = "我是好人";
string result = str.Rweilengdeyuhaoren();
Console.WriteLine(result);
Console.ReadKey();
}
}
扩展方法的本质:编译后,调用的静态方法。
这是学到的泛型委托泛型接口实现自定义比较器和扩展方法,只是我的一点点看法,希望有更好的解答可以分享