这一篇,我们来学习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. DOM0编程与基础方法

    ## 这里记录一下DOM编程的基础与方法----### DOM 的O:对象 objectO表示Object,对象的意思.JavaScript中对象可以分为三种类型1. 用户定义对象(user-defi ...

  10. Testing - 测试基础 - 方法

    选择和使用测试方法和工具 按照测试需求用途(或测试技巧)选择 在软件开发生命周期和软件测试流程中适当地选择 按照测试人员实际技能选择 选择可提供的和可执行的 测试方法 类别及技巧 目标 使用方法 举例 ...

随机推荐

  1. DDD 领域驱动设计-Value Object(值对象)如何使用 EF 进行正确映射

    写在前面 首先,这篇博文是用博客园新发布的 MarkDown编辑器 编写的,这也是我第一次使用,语法也不是很熟悉,但我觉得应该会很爽,博文后面再记录下用过的感受,这边就不多说. 阅读目录: 上一篇回顾 ...

  2. Count Complete Tree Nodes

    Given a complete binary tree, count the number of nodes. Definition of a complete binary tree from W ...

  3. ios cocos2d TexturePacker生成文件后的使用方法

    (1)将*.pvr.ccz文件转换为CCSpriteBatchNode (2)   将对应的plist文件读到CCSpriteFrameCache中 (3) 从CCSpriteFrameCache获取 ...

  4. HDU 5877 Weak Pair(弱点对)

    HDU 5877 Weak Pair(弱点对) Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Jav ...

  5. Rejected request from RFC1918 IP to public server address

    Rejected request from RFC1918 IP to public server address

  6. 代码静态分析工具PC-LINT安装配置

    代码静态分析工具PC-LINT安装配置--step by step                             作者:ehui928                             ...

  7. 【原创】大数据基础之Ambari(1)简介、编译安装、使用

    官方:http://ambari.apache.org/ The Apache Ambari project is aimed at making Hadoop management simpler ...

  8. 【SP1811】 LCS - Longest Common Substring(SAM)

    传送门 洛谷 Solution 考虑他要求的是最长公共子串对吧,那么我们对于一个串建后缀自动机,另一个串在后缀自动机上面跑就是了. 复杂度\(O(n+m)\)的,很棒! 代码实现 代码戳这里

  9. javaweb环境搭建

    首先,在开始搭建MyEclipse的开发环境之前,还有三步工具的安装需要完成,只要在安装配置成功之后才可以进入下面的java Web项目开发环境的搭建. 1.安装工具 第一步,下载并安装JDK,到官网 ...

  10. UNIX环境编程学习笔记(2)——文件I/O之不带缓冲的 I/O

    lienhua342014-08-25 1 文件描述符 对于内核而言,所有打开的文件都通过文件描述符引用.文件描述符是一个非负整数.当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符. ...