1.c#委托
//创建委托
public delegate void t(string s);
//创建方法
public static void sss(string ss)
{
Console.WriteLine(ss + "买早餐");
}
public static void ssss(string ss)
{
Console.WriteLine(ss + "买鸡公煲");
}
static void Main(string[] args)
{
//创建委托对象 sss为方法名,sss的返回类型和参数类型与个数要和委托类型一致
t d = new t(sss);
t dd = sss;
//多重委托
dd = dd + ssss;
dd -= sss;
//调用委托,.Invoke可以省略
dd.Invoke("c");
}
2.隐式类型与匿名类型
//使用隐式类型声明变量,必须赋初始值
var s = "p";
//显示类型
int aa = 0;
Console.WriteLine(s.GetType());
Console.WriteLine(aa.GetType());
//匿名对象
var b = new
{
id = 10010,
name = "dd",
age = 20
};
//属性类型和b一致,那么她们共用一个匿名类
var c = new
{
Id = 10020,
Name = "cc",
Age = 22
};
Console.WriteLine(c.GetType());
Console.WriteLine(b.GetType());
匿名方法
public delegate string t();
public class _2
{
static void Main(string[] args)
{
t del = delegate ()
{
return "我是匿名方法";
};
string m = del();
Console.WriteLine(m);
}
}
注意:匿名方法不用声明返回值类型,但是匿名方法返回值类型必须和委托返回值类型一致
2.在参数方面,参数数量,类型和修饰符必须和委托一样
3.扩展方法
扩展方法是静态的,所以该类也定义静态
public static int a(this string s)
{
return s.Split(new char[] {' ',',','?'},StringSplitOptions.RemoveEmptyEntries).Count();
}
static void Main(string[] args)
{
string s="How are you?";
int count = s.a();
Console.WriteLine(count);
}
4.YIELD关键字
public static IEnumerable<goods> getlist(List<goods> list,double price)
{
List<goods> goods = new List<goods>();
foreach (var item in list)
{
if (item.goodspice== price)
{
yield return item;
}
}
}
static void Main(string[] args)
{
List<goods> goods1 = new List<goods>()
{
new goods() {goosname="可乐",goodspice=9.9},
new goods() {goosname="薯条",goodspice=4},
new goods() {goosname="麻花",goodspice=5.9},
new goods() {goosname="油条",goodspice=4}
};
IEnumerable<goods> a= getlist(goods1, 4);
foreach(var item in a)
{
Console.WriteLine(item.goosname+"---"+item.goodspice);
}
}
5.lambda表达式
//声明委托
public delegate void dele(string s);
public static void sss(string ss)
{
Console.WriteLine(ss + "买早餐");
}
static void Main(string[] args)
{
dele fun = new dele((a) =>
{
Console.WriteLine(a+"你好");
});
fun.Invoke("momo");
}
//action是系统提供的委托类,是无返回值委托
Action<string> action = new Action<string>((a) =>
{
Console.WriteLine(a + "你好");
});
action("m");