C#方法Extra
C#方法Extra
上次说的只是方法的一些基本东西,今天讲讲重载和 Lambda 表达式。
重载
方法的重载(overload)指的是同一个名字的方法,有着不一样的方法签名(method signature),函数体里面的内容也可以不一样。方法的签名包括方法的名称和一个参数列表(方法的参数顺序和类型),注意,返回值不是方法的签名。实例构造函数签名由它的每一个形参(从左到右 的顺序)的类型和种类(值、引用或输出参数)组成。
平时用到重载是为了在给定了参数列表和一组候选函数成员的情况下,选择一个最佳函数成员来实施调用。下面看一段代码:
using System;
namespace SomeNotes
{
class Program
{
public static void Main(string[] args)
{
Student stu = new Student();
Console.WriteLine(stu.Add(1, 2));
Console.WriteLine(stu.Add(1.2, 2.3));
stu.Add();
}
}
class Student
{
public int Add(int a, int b)
{
return a + b;
}
public double Add(double a, double b)
{
return a + b;
}
public void Add()
{
Console.WriteLine("No parameter!");
}
}
}
上面的Student
类里面有三个都叫做Add
的方法,但是这三个方法的签名都不一样,他们就构成了重载的关系。stu
调用Add
函数的时候,根据给的参数不一样,调用的Add
也不一样。
在写重载的时候,当你打出Add
这个方法的时候,Visual Studio会提示你有三个重载。
最后的结果如下图所示:
最后再强调一点:函数的返回值不是函数的签名!
Lambda表达式
Lambda表达式是一个匿名函数,用于节约代码量,提高写程序的效率。
Lambda表达式的语法为:( parameter ) => statement 。参数列表可以有多个参数,也可以没有参数(void),参数的类型可以显式声明,也可以隐式声明,因为编译器能根据上下文推断参数的类型。下面举几个例子:
(x, y) => x * y //多参数,隐式类型=> 表达式
x => x * 5 //单参数, 隐式类型=>表达式
x => { return x * 5; } //单参数,隐式类型=>语句块
(int x) => x * 5 //单参数,显式类型=>表达式
(int x) => { return x * 5; } //单参数,显式类型=>语句块
() => Console.WriteLine() //无参数
这些都是有效的声明。其实Lambda表达式也十分形象,就是把左边括号里面的参数,传到右边的表达式里面,一般都是一个方法。为什么说Lambda表达式是一个匿名函数呢?你可以看看表达式里面有没有出现过方法的名字,它里面只包括了原来方法体里面的一些逻辑,却没有为方法命名,这就体现了匿名方法的好处,省略了声明的步骤,只需要给出逻辑,就能完成这个方法。
Lambda表达式更多情况下用在事件、委托里面,因为还没说到,所以这部分先挖坑了,到时候说委托和事件的时候会给例子出来的。(不是我懒)