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表达式更多情况下用在事件、委托里面,因为还没说到,所以这部分先挖坑了,到时候说委托和事件的时候会给例子出来的。(不是我懒)

C#方法Extra的更多相关文章

  1. extra过滤

    extra extra(select=None, where=None, params=None, tables=None, order_by=None, select_params=None) 有些 ...

  2. django-附件上传、media、extra、事务

    1 普通上传 1.1 html <form action="/index/" method="post" enctype="multipart/ ...

  3. Django之extra

    extra过滤 extra extra(select=None, where=None, params=None, tables=None, order_by=None, select_params= ...

  4. Django【第19篇】:Django之extra

    extra过滤 extra extra(select=None, where=None, params=None, tables=None, order_by=None, select_params= ...

  5. Django之extra过滤

    extra extra(select=None, where=None, params=None, tables=None, order_by=None, select_params=None) 有些 ...

  6. python框架之django

    python框架之django 本节内容 web框架 mvc和mtv模式 django流程和命令 django URL django views django temple django models ...

  7. Django基础之安装配置

    安装配置 一 MVC和MTV模式 著名的MVC模式:所谓MVC就是把web应用分为模型(M),控制器(C),视图(V)三层:他们之间以一种插件似的,松耦合的方式连接在一起. 模型负责业务对象与数据库的 ...

  8. 【Django】--Models 和ORM以及admin配置

    Models 数据库的配置 1    django默认支持sqlite,mysql, oracle,postgresql数据库 <1>sqlite django默认使用sqlite的数据库 ...

  9. 循序渐进Python3(十二) --2--  web框架之django简单实现oracle数据库操作

    在 Django 中构建 Oracle 数据库支持的 Web 应用程序 了解如何配置 Django 以便与 Oracle 数据库交互,并使用 ORM 进行数据库连接.             产能在软 ...

随机推荐

  1. source insight编辑matlab,不可

    先说结论,我用的source insight版本是4.0x,matlab的语言包用的sourceinght官网提供的matlab.clf.链接如下:https://www.sourceinsight. ...

  2. Mac搭建appium环境

    1.安装brew 查看是否已经装上brew,终端输入命令:brew --version,已经装上的就不用再装了: 如果没有安装,终端输入命令:ruby -e "$(curl -fsSL ht ...

  3. Urule开源版系列4——Core包核心接口之规则解析过程

    Urule运行规则文件,是如何进行的,通过一个请求doTest来探一下 com.bstek.urule.console.servlet.respackage.PackageServletHandler ...

  4. python给excel文件加密码,并重新生成文件

    需安装pywin32 pip install pywin32 直接上源码.简单几行就搞定 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. ...

  5. python3笔记-读取ini配置文件

    在代码中经常会通过ini文件来配置一些常修改的配置.下面通过一个实例来看下如何写入.读取ini配置文件. 需要的配置文件是: [path] back_dir = /Users/abc/PycharmP ...

  6. rpc中的高并发

    手写一个高性能的rpc框架 模拟服务端,运行main函数,相当于启动服务器 public class ServerApplication { public static void main(Strin ...

  7. 深入了解Netty【八】TCP拆包、粘包和解决方案

    1.TCP协议传输过程 TCP协议是面向流的协议,是流式的,没有业务上的分段,只会根据当前套接字缓冲区的情况进行拆包或者粘包: 发送端的字节流都会先传入缓冲区,再通过网络传入到接收端的缓冲区中,最终由 ...

  8. 业务级别MySQL

    业务级别MySQL 目录 业务级别MySQL 1. 权限管理和备份 1. 用户管理 1. SQLyog可视化操作 2. SQL命令操作 2. MySQL备份 3. 规范数据库设计 1. 为什么需要设计 ...

  9. 为什么选择H5游戏开发定制?

    为什么选择H5游戏开发定制? 随着微信H5游戏推广带来的显著效果,越来越多的商家已经加入到游戏营销的队伍中来, 对H5小游戏有了解的商家都知道,[模板游戏]的价格往往低于[定制游戏]的价格,可是为什么 ...

  10. 使用wangEditor富文本编辑器

    客户端配置说明 下载 百度网盘地址:点我下载 下载密码:x09x 使用 首先要引入wangEditor的js文件,然后引入jQuery 然后在body里: <body> <butto ...