这一篇,我们来学习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. Android高效的应用程序开发工具集1---ant构建一个简单的Android工程

    在java编译那些事通过提到ant编译Java工程,如今扩大到用它来构建Android目,事实上道理是相通的.变化的仅仅是使用的形式.ant构建相比IDE的优点是多个子项目使用自己定义jar包时,an ...

  2. Oracleclient+PLSQL Developer实现远程登录Oracle数据库

    Oracle数据库功能强大.性能卓越,在造就这些长处的同一时候,也导致Oracle占内存比較多.针对这个问题,我们怎样做到取其精华去其糟粕呢? 解决方式:我们能够在局域网内的server上安装庞大的O ...

  3. Qlik Sense Desktop

    2014年新一代的报表利器 Qlik Sense Desktop 初步体验 2014-09-22 12:45 by BIWORK, 974 阅读, 7 评论, 收藏, 编辑 Qlik Sense De ...

  4. oracle_base和oracle_home 的区别

    oracle_base和oracle_home 的区别 $ORACLE_BASE和$ORACLE_HOME 的区别 2009-06-22 11:25:34|  分类: Oracle |字号 订阅   ...

  5. 数据结构二叉树的java实现,包括二叉树的创建、搜索、删除和遍历

    根据自己的学习体会并参考了一些网上的资料,以java写出了二叉树的创建.搜索.删除和遍历等操作,尚未实现的功能有:根据先序和中序遍历,得到后序遍历以及根据后序和中序遍历,得到先序遍历,以及获取栈的深度 ...

  6. java使用maven创建springmvc web项目

    创建maven项目,使用maven-archetype-webapp 创建完成后首先是在pom.xml里增加maven的依赖 <dependencies> <dependency&g ...

  7. storm安装(2)ZeroMQ、JZMQ、Python、Java环境的安装

    2.ZeroMQ安装 把安装本件zeromq-2.1.7.tar.gz拷贝到home文件路径下, 给文件加入权限 chmod +x /home/zeromq-2.1.7.tar.gz 解压文件 tar ...

  8. oauth与openid

    转自http://desert3.iteye.com/blog/1701626 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列 ...

  9. linux 之 popen函数

    描述 popen() 函数 用 创建管道 的 方式启动一个 进程, 并调用 shell. 因为 管道是被定义成单向的, 所以 type 参数 只能定义成 只读或者 只写, 不能是 两者同时, 结果流也 ...

  10. SOCKET网络编程细节问题1

    SOCKET网络编程快速上手(二)——细节问题(1) 三.细节问题一个也不能少 Socket编程说简单也简单,程序很容易就能跑起来,说麻烦还真是麻烦,程序动不动就出问题.记得刚开始写网络代码的时候,那 ...