这一篇,我们来学习C#中的方法——函数

1.  方法的功能

   方法的功能:用来复用代码的,当我们在一个程序中反复的写了同样的代码,我们就可以把需要重复写的代码定义在一个方法中,用到的时候只需要调用就可以了。这样做也是对代码的封装。

  定义方法的语法:

  [访问修饰符] [static] 返回值类型 方法名([参数列表])

  { 方法体; }

  在方法中定义的变量称为局部变量,其作用域从定义开始,到其所在的大括号结束为止。

2.  要注意的地方

  1. 方法可以拥有一个或多个参数,或者没有任何参数。参数列表中的参数相当于方法中的局部变量。

   2. 如果方法没有返回值的话,返回值类型为void,每个方法只有一个返回值(如果要返回多个值,可以返回一个数组或者通过参数来返回);但构造方法和析构方法例外,不允许有任何返回值。

   3. 方法中只要遇到return,如果返回值为void类型则立即退出方法;如果返回值为非void类型,则会返回一个与返回值类型相同的值。如果try…cathy…finally,在try里面若遇到return,finally依然会执行。

   4. 方法的功能要单一。

3.  方法返回多个值的例子

   a) 用数组返回多个值

    这种情况只适应于需要返回多个相同类型的值的时候;如果需要返回多个不同类型的值,这样做就不行了。

static int[] Sum(int numA, int numB)
{
int sum = numA + numB;
int sub = numA - numB;
int[] arrRes = new int[];
arrRes[] = sum;
arrRes[] = sub;
return arrRes;
}

b)用out关键字创建输出参数,我们可以在一个方法中返回多个不同类型的值

  因为使用out修饰参数后,传递的是参数的地址,所以我们对形参进行的修改会影响到实参。

在调用方法时候,假如实参对应的形参有被out修饰,那么在实参前面也要加上out修饰。

  如果在方法内,没有对被out修饰的参数进行赋值,则编译会报错:“ 离开当前方法之前必须对 out 参数赋值 ”。

            int numA = , numB = ;
int sum, sub;
sum = Test(numA, numB, out sub);//通过参数来返值
Console.WriteLine("sum = {0} sub = {1}", sum, sub);
//sum = 17 sub = 3 static int Test(int a, int b,out int sub)
{
//在没有对sub进行赋值之前,不能使用它
//sub += 1; 错误,使用了未赋值的 out 参数“sub”
//sub = 1; 正确,为sub赋值
sub = a - b; int sum = a + b;
return sum;
}

  c) out 与 ref 的区别:

   out 只有传出的功能,在方法内必须赋值;

     ref 可以传入和传出,侧重传入,在调用方法前必须赋值,在方法内可以不赋值。

   通过ref,我们能够将一个变量带入一个方法中进行改变,改变完成后,再将改变后的值带出方法。

     C#通过ref这个关键字,屏蔽了C++中的指针

            int x = , y = ;
int mul = ;
Fun(x, y, ref mul);
Console.WriteLine("mul = {0}", mul);
// mul = 6 static void Fun(int x,int y, ref int mul)
{
mul = x * y;
}

4.  方法中的可变参数

  Console.WriteLine(“a = {0}, b = {1}” ,  0 , 1) 中可以允许有多个参数。

  public static void WriteLine(string format, params object[] arg);

  上面方法中的两个参数接受的值分别是:“a = {0}, b = {1}” , 一个object类型的数组 arg={0,1}

  params 的作用就是将多个参数组合成一个数组怕;如果可变参数不传的话,可变参数就是一个长度为0的数组对象。

  被params 修饰的参数必须放在方法中参数列表的最右端

        static void Main(string[] args)
{
int[] arrAge = { , , , , , , };
ParamesTest("刘德华", arrAge);//可变参数可以直接传递数组对象进去
ParamesTest("刘德华", , , );//可变参数也可以单个的传递值
ParamesTest("刘德华");//可变参数可以不传,那么方法中的可变参数形参就是一个Length=0的数组对象
Console.ReadLine();
} static void ParamesTest(string name, params int[] ages)//可变参数必须放在方法参数列表的最后一个
{
Console.WriteLine("您好?~~{0}", name);
Console.WriteLine("ages==null:" + ages == null);
Console.WriteLine("ages.Length=" + ages.Length);
foreach (int age in ages)
{
Console.WriteLine("当前循环到的age=" + age);
}
Console.WriteLine();
}

  输出:

5.  方法的重载

  一般在同一个类中,方法名相同,方法的参数列表不同,才能构成方法的重载。

  注意:方法的重载与返回值没有关系。

  例如,Console.WriteLine的重载

  

    如何在编程过程中,查看一个方法有多少种重载?

  

  在输入方法名,输入左括号后,不要急着输入右括号,就会跳出这个函数的重载信息。这时按方向键中的“向上”和“向下”,就可以来查找我们需要的方法了。

.NET基础——方法的更多相关文章

  1. 在同一个Apache服务器软件上部署多个站点的基础方法

    这篇文章主要介绍了Apache中Virtual Host虚拟主机配置及rewrite模块中的重要参数说明,是在同一个Apache服务器软件上部署多个站点的基础方法,需要的朋友可以参考下(http:// ...

  2. CodeBlocks(17.12) 代码调试基础方法&快捷方式

    转载:CodeBlocks(17.12) 代码调试基础方法&快捷方式: https://www.cnblogs.com/DCD112358/p/8998053.html

  3. Python_Mix*re模块基础方法,进阶,正则表达式的使用

    re模块import re 基础方法 findall:匹配所有 ,每一项都是列表中的一个元素,返回的是列表 search只匹配从左到右的第一个,得到的不是直接的结果,而是一个变量,通过这个变量的gro ...

  4. RF实现多次失败重跑结果合并的基础方法和优化方法

    实现思路:通过分次执行失败案例重跑,然后通过结果文件合并命令实现多次失败重跑结果文件的合并,并输出合并后的log和report文件: 说明:具体失败案例重跑命令和结果文件合并命令请参考本博客其他相关章 ...

  5. Java基础-方法(method)的应用

    Java基础-方法(method)的应用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 方法就是定义在类中,具有特定功能的一段小程序,方法也称为函数(function),方法可以接 ...

  6. 实现同时提交多个form(基础方法) 收集

    实现同时提交多个form(基础方法) 收集 分类: 1.2-JSP 1.3-J2EE 1.1J2se 1.0-Java相关2011-12-01 20:59 1644人阅读 评论(0) 收藏 举报 bu ...

  7. java发送邮件基础方法(另附部分主流邮箱服务器地址、端口及设置方法)

    java发送邮件基础方法,可通过重载简化参数 import java.io.File; import java.io.UnsupportedEncodingException; import java ...

  8. 【JavaScript】数组方法之基础方法

    数组方法之基础方法 Array 对象属性 属性 描述 constructor 返回对创建此对象的数组函数的引用. length 设置或返回数组中元素的数目. prototype 使您有能力向对象添加属 ...

  9. Java基础——方法的调用

    Java基础--方法的调用     总结: 1. 在同一个类中-- 对于静态方法,其他的静态和非静态方法都可以直接通过"方法名"或者"类名.方法名"调用它. 对 ...

  10. 《Java基础——方法的调用》

    Java基础--方法的调用     总结: 1. 在同一个类中-- 对于静态方法,其它的静态和非静态方法都可以直接通过"方法名"或者"类名.方法名"调用它. 对 ...

随机推荐

  1. 使用STM32CubeMX来创建属于自己的工程

    使用STM32CubeMX的好处就是GPIO口可以使用图形化的方式进行配置,配置完成之后可以立即生成支持多种编译器的工程文件,之后打开即可编译通过了,非常方便. 操作很简单,如下所述: 1 从ST的官 ...

  2. 一个web开发框架

    一个web开发框架 怎么才能成为一名架构师?需要具备哪些条件? 作为一名码农我迫切希望自己成为一个比较合格的web架构师,昨晚心血来潮小弟花了4个小时的时间整了个简易的web开发框架,由于第一次搭建框 ...

  3. NHProfiler使用方法

    NHProfiler使用方法 NHProfiler是一个针对Nhibernate运行分析的工具. 使用如下: (1)在创建ISessionFactory的项目中引用NHProfiler安装目录下的Hi ...

  4. 领域模型(Domain Model)

    领域模型(Domain Model) 一:面向对象设计中最简单的部分与最难的部分 如果说事务脚本是 面向过程 的,那么领域模型就是 面向对象 的.面向对象的一个很重要的点就是:“把事情交给最适合的类去 ...

  5. Oracle中join left,join right,inner join,(+) 等

    Oracle中join left,join right,inner join,(+) 等 博客分类: Oracle   建表create table TEST1create table TEST1(  ...

  6. 在PHP中如何连接到数据库

    首先我们先运行WampServer中的phpMyAdmin随即弹出phpMyAdmin页面   在弹出的页面中左边是数据库列表  右边是相应的设置 选择一个数据库  在里面创建一张数据表  注意创建数 ...

  7. gradle测试与线上打包

    首先,第一反应理所当然的是profile : <?xml version="1.0" encoding="UTF-8"?> <beans xm ...

  8. 事件处理(Event Handlers) ng-click操作

    事件处理(Event Handlers) ng-click操作 step 10 本文主要通过介绍ng-click方法来对angularjs中的事件处理方法做个了解. 1.切换目录 git checko ...

  9. Markdown 代码测试!

    # Mou ![Mou icon](http://mouapp.com/Mou_128.png) ## Overview **Mou**, the missing Markdown editor fo ...

  10. JS菜单条智能定位效果

    JS仿淘宝详情页菜单条智能定位效果 2014-01-15 15:40 by 龙恩0707, 1366 阅读, 9 评论, 收藏, 编辑 类似于淘宝详情页菜单条智能定位 对于每个人来说并不陌生!如下截图 ...