当前位置: 首页 > news >正文

C#基础 [07] 方法[上]

一、方法的结构
   1.方法的概念
     C#中的方法就是声明在类型中的语句块,是类型的函数成员。它既可以有名称,也可以没有名称,没有方法名的方法称为匿名方法。
   2.方法的结构
     方法主要由两部分组成:方法头和方法体。其中,方法头指定方法的特征,包括方法是否返回值以及返回值的类型、方法名和参数列表;方法体就是由一对大括号括起来的可执行代码的语句序列,包括本地变量、流程控制结构、方法调用和嵌套块等。方法的结构如下图所示

 

  3.方法声明示例

    下面示例声明一个无返回值的、方法名为“SayHello”、无参数的公共方法。

1         /// <summary>
2         /// 方法声明
3         /// </summary>
4         public void SayHello()
5         {
6             System.Console.WriteLine("Hello World!");
7         }

二、本地变量

  1.本地变量
    本地变量就是声明在方法体中的变量,本地变量经常用于保存本地的或者临时的计算数据。本地变量存在于创建它的块以及嵌套的块。可以在方法体内的任意地方声明本地变量,但是必须遵循“先声明、后赋值、再使用”的先后顺序。

    声明本地变量的语法:“ Type Identifier = value; ",其中Type表示变量类型,Identifier表示变量名,value表示给变量赋的初始值。下面的方法中声明了两个本地变量。

 1         /// <summary>
 2         /// 方法声明
 3         /// </summary>
 4         public void SayHello()
 5         {
 6             // 声明两个本地变量 “name” 和“ age ”
 7             string name = "yunshi";
 8             int age = 23;
 9             System.Console.WriteLine("我叫{0},今年{1}岁了!", name, age);
10         }

  2.本地变量与类字段的对比

    1).生存期:实例字段从实例被创建时开始,直到实例不再被访问时结束;本地变量从它在块中声明开始,直到块完成执行时结束。

    2).隐式初始化:实例字段会隐式初始化为它的字段类型的默认值;本地变量没有隐式初始化,所有变量必须先初始化,然后才能使用,否则报错。

    3).存储位置:类的所有字段都是存储在对内存堆中的,无论是值类型的还是引用类型的;本地变量如果是值类型,则存储在内存栈里,如果是引用类型,则引用存储在栈里,而实际数据存储在堆里。

  3.类型推断和var

    1).类型推断

      当我们声明本地变量时,很多时候我们所写的变量类型都是编译器可以通过赋值的等号右边的值来反推出来,这就叫类型推断。比如 int i =10; 这条声明语句,左边的类型int 可以通过右边的10推断出来。由于类型推断,催生了下边的var关键字。 

    2).var关键字

    从C#3.0开始,可以在变量声明的开始部分的显式类型名的位置使用新的var关键字,它表示可以从初始化语句右边推断出的类型。下面的两条本地变量声明语句中的int 和 var 是等价的。

1             // 声明2个整型变量i和j
2             int i = 10;
3             var j = 100;

    var关键字使用条件:只能用于本地变量,不能用于字段;只能在变量声明语句中包含初始化时才能使用,如果只是声明一个变量而没有初始化,就不能使用var;var关键字并不改变C#的强类型性质,一旦编译器推断出变量的类型,该类型就是固定的了。

    C#3.0及以后版本推荐在以下几种情况下使用var关键字隐式类型化局部变量,以简化程序的书写:

      ①.如果赋值语句右侧的变量类型十分明显,或在精确的类型并不重要时,使用隐式类型的局部变量;赋值语句右侧的类型不明显时,不要使用var。

1             var var1 = "This is clearly a string.";
2             var var2 = 27;
3             // 数字和字符串用"+"号相连,最后转换为了字符串
4             var var3 = Console.ReadLine() + var1 + var2;
5             Console.WriteLine(var3);

          ②.使用隐式类型在 for 和 foreach 循环中确定循环变量的类型。 

 1             // a.在 for 语句中使用隐式类型。
 2             var syllable = "ha";
 3             var laugh = "";
 4             for (var i = 0; i < 10; i++)
 5             {
 6                 laugh += syllable;
 7                 Console.WriteLine(laugh);
 8             }
 9 
10             // b.在 foreach 语句中使用隐式类型。
11             foreach (var ch in laugh)
12             {
13                 if (ch == 'h')
14                     Console.Write("H");

15                 else
16                     Console.Write(ch);
17             }

三、本地常量

  1.本地常量

    本地常量就是声明在方法体中的常量。常量(本地常量/成员常量)的特征如下:常量在声明的同时必须初始化;在声明后值不能改变。

  2.本地常量的声明

    本地常量使用const关键字声明。语法:“const Type Identifier = value;” const不是修饰符,而是核心声明的一部分,必须放在类型之前,其它部分和本地变量声明语法相同。下面是一个声明并且读取本地常量值的示例:

 1         /// <summary>
 2         /// 显示圆的面积
 3         /// </summary>
 4         void DisplayRadius()
 5         {
 6             // 声明本地常量
 7             const double PI = 3.1416;
 8 
 9             // 声明本地变量
10             int radius = 2;
11 
12             // 读取本地变量和本地常量的值
13             double area = radius * radius * PI;
14 
15             Console.WriteLine("Radius:{0},Area:{1}", radius, area);
16         }

四、方法调用

  1.方法使用“方法名+参数列表”进行调用。下面是一个调用上面“显示圆的面积”的方法,其中参数为空。

1         static void Main(string[] args)
2         {
3             Program p = new Program();
4             // 使用"实例名.方法名"调用实例方法
5             p.DisplayRadius();
6         }

  2.方法调用的执行顺序

    1).当前方法的执行在调用点被挂起。

    2).流程控制转移到被调用方法的开始。

    3).被调用方法执行,直到完成(或抛出异常)。

    4).控制回到发起调用的方法。

    该调用顺序的图示如下:

     

 五、方法返回值

  1.返回值类型

    很多方法声明的目的就是为了它的返回值。方法是否返回值以及返回值的数据类型都由方法声明的返回值类型决定,如果要返回值,则必须在方法名前面声明一个具体的返回类型;如果方法不返回值,则不行必须声明void返回类型。下面的示例声明一个返回int值的方法:

1         /// <summary>
2         /// 获得当前小时
3         /// </summary>
4         /// <returns></returns>
5         int GetHour()
6         {
7             var dt = new DateTime();
8             return dt.Hour;
9         }

  2.返回语句

    1).普通return语句

      在上面的示例中,使用return语句返回了当前小时数。如果方法头中声明了非void的返回类型,则必须在方法体中每一条穿过方法的路径上有一条带有确定值的reutrn语句。return语句的语法为:“return Expression;”,其中Expression为一个确定的值。

    2).void方法的return语句

      本来,void方法不需要返回语句,但我们可以根据某些条件使用不带参数的return语句提前退出方法以简化程序逻辑。语法为“ reutrn;"。注意,这里的return语句不带参数,只有一个分号,并且只能用于返回类型为void的方法体中。下面是一个示例:

 1         /// <summary>
 2         /// 根据条件提前退出方法
 3         /// </summary>
 4         /// <param name="msg"></param>
 5         void Test(string msg)
 6         {
 7             if (msg == "Hello")
 8             {
 9                 return;
10             }
11             Console.WriteLine("你好!");
12         }

 

转载于:https://www.cnblogs.com/sunyunh/archive/2012/12/31/2841233.html

相关文章:

  • Window7下SourceInsight加载需要字体方法
  • 阿里云高性能AI服务 -- 基于Docker和EGS一键创建高性能Tensorflow分布式训练
  • CBitMap的用法 from http://www.cnblogs.com/toconnection/archive/2012/08/04/mfc.html
  • ES6指北【2】—— 箭头函数
  • MyBatis + winform 配置
  • VS2015 中统计整个项目的代码行数
  • EI收录中国大陆期刊名录(2012年)
  • 2018/02/28
  • 路由反射器(Route Reflector)简介
  • 最优化原理,凸优化
  • Windows7+vs2008进行wince开发的环境配置
  • 太难、太贵、太耗时......这些都是你对CRM工具的误解!
  • 百度搜索结果的URL参数关键词(wd|word|kw|keyword)
  • delay的几个函数说明
  • 定制Android ListView 快速滚动的滚动条-fast scroll bar thumb
  • hexo+github搭建个人博客
  • 【5+】跨webview多页面 触发事件(二)
  • canvas 绘制双线技巧
  • HTTP中GET与POST的区别 99%的错误认识
  • k8s如何管理Pod
  • overflow: hidden IE7无效
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • vue自定义指令实现v-tap插件
  • Vultr 教程目录
  • 阿里云Kubernetes容器服务上体验Knative
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 前端性能优化--懒加载和预加载
  • 什么软件可以剪辑音乐?
  • 使用 @font-face
  • 通过几道题目学习二叉搜索树
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​​​​​​​​​​​​​​Γ函数
  • ​如何在iOS手机上查看应用日志
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #NOIP 2014# day.1 T2 联合权值
  • #NOIP 2014# day.2 T2 寻找道路
  • #Z2294. 打印树的直径
  • (175)FPGA门控时钟技术
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (层次遍历)104. 二叉树的最大深度
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (原創) 未来三学期想要修的课 (日記)
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .mysql secret在哪_MYSQL基本操作(上)
  • .NET 中什么样的类是可使用 await 异步等待的?