C#中的委拖和匿名委拖有什么区别? C#中的委拖和匿名委拖有什么区别? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 去msdn看下什么叫做匿名方法就晓得什么叫匿名委托了 匿名方法(anonymous method)允许一个与委托关联的代码被内联地写入使用委托的地方,这使得代码对于委托的实例很直接。除了这种便利之外,匿名方法还共享了对本地语句包含的函数成员的访问。2.0之前的C#版本中,声明委托的惟一方法是使用命名方法。C#2.0引入了匿名方法,如果使用匿名方法,则不必创建单独的方法,因此减少了实例化委托所需的编码系统开销。简言之以前是委托调用一个方法,现在是直接将方法的代码块作为参数传给委托而不必调用方法。这个网页有详细的说明:http://book.51cto.com/art/200804/70303.htm 随便以某个相关词汇搜到了第一个帖子推荐出来:http://www.cnblogs.com/ark/archive/2009/03/06/1404593.html 不过要说明的是,现在更多地使用lamda表达式(基于一种特殊的匿名方法),而不是普通的匿名方法。 //注册委托方法1:声明一个方法,注册到委托类型中//GridView_Book.DataSource = BookHelper.SearchByCondition(new BookHelper.SearchCondition(ByPrice));//注册委托方法2:匿名方法//GridView_Book.DataSource = BookHelper.SearchByCondition(delegate(Book book) { return book.Price > 10; });//注册委托方法3:Lambda表达式(2008新特性)//GridView_Book.DataSource = BookHelper.SearchByCondition(b => b.Price < 70);//扩展方法(2008新特性)GridView_Book.DataSource = BookHelper.Books.SearhByCondition(b => b.Price < 100); 是的,现在流行用lamda表达式,不过对于它的好处我还没有理解 匿名 lamda表达式的基础吧 class Test{ delegate void TestDelegate(string s); static void M(string s) { Console.WriteLine(s); } static void Main(string[] args) { // C# 1.0 TestDelegate testdelA = new TestDelegate(M); // C# 2.0 TestDelegate testDelB = delegate(string s) { Console.WriteLine(s); }; // C# 3.0 TestDelegate testDelC = (x) => { Console.WriteLine(x); }; testdelA("C# 1.0,命名方法"); testDelB("C# 2.0,匿名方法"); testDelC("C# 3.0,lamda"); Console.ReadKey(); } } 委托让方法作为方法的参数进行使用,分为单一委托和多播委托。委托相当于C、C++中的指针,委托时类型安全的,委托要先声明然后实例化,最后才能调用。委托是引用类型、凡事可以声明类的地方都可以声明委托,委托的签名必须与实例委托时使用的方法的签名相同,这种方法使用委托,方法是不许存在的。delegate double MathDele(double value);//声明委托 static double Square(double value) { return value * value; }//定义委托要包含的方法MathDele op = new MathDele(Square);//实例化委托op(3.5);//调用委托使用匿名方法使用委托,也就是委托要包含的方法可以不存在,在实例化委托时再去定义。delegate double MathDele(double value);//声明委托MathDele op1 = delegate(double value) { return value * value; };//实例化委托op1(3.5);//调用委托使用匿名方法的好处有很多,比如此处使用匿名方法会少定义一个方法,提高程序编译效率。另外,有时候,委托要包含的方法会包含在另外一个类中,然后使用double CreateOp(MathDele myDele,double value){double result=myDele(value);}如果使用匿名方法,这个时候可以省去一个类的定义以及方法的声明,这样会提高程序性能的。 委托让方法作为方法的参数进行使用,分为单一委托和多播委托。 委托相当于C、C++中的指针,委托是类型安全的,委托要先声明然后实例化,最后才能调用。 委托是引用类型、凡事可以声明类的地方都可以声明委托,委托的签名必须与实例委托时使用的方法的签名相同,这种方法使用委托,方法是必须存在的。 delegate double MathDele(double value);//声明委托 static double Square(double value) { return value * value; }//定义委托要包含的方法 MathDele op = new MathDele(Square);//实例化委托 op(3.5);//调用委托 使用匿名方法使用委托,也就是委托要包含的方法可以不存在,在实例化委托时再去定义。 delegate double MathDele(double value);//声明委托 MathDele op1 = delegate(double value) { return value * value; };//实例化委托 op1(3.5);//调用委托 使用匿名方法的好处有很多,比如此处使用匿名方法会少定义一个方法,提高程序编译效率。另外,有时候,委托要包含的方法会包含在另外一个类中,然后使用 double CreateOp(MathDele myDele,double value) { double result=myDele(value); } 如果使用匿名方法,这个时候可以省去一个类的定义以及方法的声明,这样会提高程序性能的。 数据库操作性能的小问题 关于俩个form之间的调用 C#初学者的问题。。关于装箱与拆箱与子类和父类 写了个继承picturebox的控件,出问题了 关于 PropertyChanged 事件 今天去大学听了一节课,碰到一个破老师解释的问题。如下 我怎么在窗体放大的时候得到一个事件? 关于数据计算的问题,无法正确计算 C# listview 鼠标移开事件 各种文档格式以image格式存储到sql server数据库中,但输出绑定到image控件时乱码?(C#) 屏幕取词问题 c# webbroswer问题
//注册委托方法1:声明一个方法,注册到委托类型中
//GridView_Book.DataSource = BookHelper.SearchByCondition(new BookHelper.SearchCondition(ByPrice));//注册委托方法2:匿名方法
//GridView_Book.DataSource = BookHelper.SearchByCondition(delegate(Book book) { return book.Price > 10; });//注册委托方法3:Lambda表达式(2008新特性)
//GridView_Book.DataSource = BookHelper.SearchByCondition(b => b.Price < 70);//扩展方法(2008新特性)
GridView_Book.DataSource = BookHelper.Books.SearhByCondition(b => b.Price < 100);
{
delegate void TestDelegate(string s);
static void M(string s)
{
Console.WriteLine(s);
} static void Main(string[] args)
{
// C# 1.0
TestDelegate testdelA = new TestDelegate(M); // C# 2.0
TestDelegate testDelB = delegate(string s) { Console.WriteLine(s); }; // C# 3.0
TestDelegate testDelC = (x) => { Console.WriteLine(x); }; testdelA("C# 1.0,命名方法");
testDelB("C# 2.0,匿名方法");
testDelC("C# 3.0,lamda"); Console.ReadKey();
}
}
委托相当于C、C++中的指针,委托时类型安全的,委托要先声明然后实例化,最后才能调用。
委托是引用类型、凡事可以声明类的地方都可以声明委托,委托的签名必须与实例委托时使用的方法的签名相同,这种方法使用委托,方法是不许存在的。
delegate double MathDele(double value);//声明委托
static double Square(double value)
{
return value * value;
}//定义委托要包含的方法
MathDele op = new MathDele(Square);//实例化委托
op(3.5);//调用委托
使用匿名方法使用委托,也就是委托要包含的方法可以不存在,在实例化委托时再去定义。
delegate double MathDele(double value);//声明委托
MathDele op1 = delegate(double value) { return value * value; };//实例化委托
op1(3.5);//调用委托使用匿名方法的好处有很多,比如此处使用匿名方法会少定义一个方法,提高程序编译效率。另外,有时候,委托要包含的方法会包含在另外一个类中,然后使用
double CreateOp(MathDele myDele,double value)
{
double result=myDele(value);
}
如果使用匿名方法,这个时候可以省去一个类的定义以及方法的声明,这样会提高程序性能的。
委托相当于C、C++中的指针,委托是类型安全的,委托要先声明然后实例化,最后才能调用。
委托是引用类型、凡事可以声明类的地方都可以声明委托,委托的签名必须与实例委托时使用的方法的签名相同,这种方法使用委托,方法是必须存在的。
delegate double MathDele(double value);//声明委托
static double Square(double value)
{
return value * value;
}//定义委托要包含的方法
MathDele op = new MathDele(Square);//实例化委托
op(3.5);//调用委托
使用匿名方法使用委托,也就是委托要包含的方法可以不存在,在实例化委托时再去定义。
delegate double MathDele(double value);//声明委托
MathDele op1 = delegate(double value) { return value * value; };//实例化委托
op1(3.5);//调用委托 使用匿名方法的好处有很多,比如此处使用匿名方法会少定义一个方法,提高程序编译效率。另外,有时候,委托要包含的方法会包含在另外一个类中,然后使用
double CreateOp(MathDele myDele,double value)
{
double result=myDele(value);
}
如果使用匿名方法,这个时候可以省去一个类的定义以及方法的声明,这样会提高程序性能的。