方法是一种组合一系列语句以执行一个特定操作或计算一个特殊结果的方式。
它能够为构成程序的语句提供更好的结构和组织。
 
在面向对象的语言中,方法总是和类关联在一起的,我们用类将相关的方法分为一组。
方法通过参数来用于从调用者向目标方法传递数据的变量。
方法也通过一个返回值将数据返回给调用者
 
一个方法调用由以下元素构成:命名空间、类型名称、方法名称、参数以及返回数据类型。
 
1、命名空间
命名空间是一种特殊的分类机制,它将与一个特定功能有关的所有类型都分组到一起。
编译器认为所有命名空间都在同一个级别上。所以需要分别引用。
不会因为两个命名空间的包含关系,而将其认为是一个命名空间,而是两个完全独立、完全不同的命名空间。
 
用方法进行重构
将一组相关的语句转移到一个方法中,而不是随意将它们嵌入一个较大的方法中,
中重构的一种形式。重构有助于减少重复代码。
 
return语句意味着跳到方法的末尾。
 
using指令(导入命名空间,或者命名空间中的类型)
可以将来自一个命名空间的类型导入父命名空间代码块中。
虽然命名空间是嵌套的,但是using不会导入任何嵌套的命名空间,嵌套的命名空间需要单独的
显式地导入。
 
注:
使用using System后,可以使用不同的大小写形式来表示字符串数据类型:String  string
前一个版本依赖using System指令,后一个重酬使用string关键字。
两者在C#中都合法地引用了System.String数据类型,最终生成 的CIL代码毫无区别。
using 可以出现在任何一个地方,但是其作用域与其放置的的地方的作用域相同。
 
使用别名
using a1=System.Threading;
 
 
2、调用者和调用栈
 
代码执行时,方法可能调用其他方法,其他方法可能调用更多的方法。
调用嵌套调用的情况会形成调用栈,随着程序复杂程序的提高,每个方法调用另一个方法时
,这个调用栈都会变大。然后当调用结束时,调用栈会发生收缩,直到调用另一系列的方法。
栈展开:用来描述从调用栈中删除调用的过程。
栈展开的顺序通常与方法调用的顺序相反。
一个方法调用完毕之后,会将控制权返回给调用点,也就是最初发出方法调用的那个位置。
 
 
 
3、参数
 
值参数
 
参数默认是传值的。变量的栈数据会完整地复制到目标参数中。
 
无论传递的实际参数是值类型还是引用类型。
都不能修改原来的实际参数的值。(值类型不会改变原来的实际数据值,引用类型不能修改实际
参数的指向,但是可以改变指向的实际数据的值)

   class Program
{
static void Main(string[] args)
{
int x = ;
Program p = new Program();
p.ChangeValue(x, p);
Console.WriteLine("x=" + x + ",p.count=" + p.count);
Console.ReadLine(); }
public void ChangeValue(int pValue,Program p)
{
int temp = pValue;
pValue = ;
p.number = ;
p.count = ;
p = new Program();
p.count = ; }
public int number = ;
public int count = ;
}
输出:
x=0,p.count=10
 
引用参数
使用ref修饰
无论传递的实际参数是值类型还是引用类型。
都可以修改原来的实际参数的值。(值类型会改变原来的实际数据值,引用类型不仅能修改实际
参数的指向,还可以改变指向的实际数据的值)

 class Program
{
static void Main(string[] args)
{
int x = ;
Program p = new Program();
p.ChangeValue(ref x, ref p);
Console.WriteLine("x=" + x + ",p.count=" + p.count);
Console.ReadLine(); }
public void ChangeValue(ref int pValue,ref Program p)
{
int temp = pValue;
pValue = ;
p.number = ;
p.count = ;
p = new Program();
p.count = ; }
public int number = ;
public int count = ;
}
输出:
x=10,p.count=20
 
输出参数
使用out修饰
如果一个参数被标记为out,编译器就会核实在方法的所有正常返回代码路径中,是否
都对该参数进行了赋值。
 
 
参数数组
 
它允许在调用一个方法提供数量可变的参数,而不是由方法事先固定好参数的数量
1、在方法声明的最后一个参数之前,添加一个params关键字
2、将最后一个参数声明为一个数组
参数数组注意事项:
1、参数数组不一事实上是方法声明中的唯一参数。但是,参数数组必须是方法慢用中的最后一个参数
2、调用者可以为参数数组指定0个参数,也可以指定多个参数
3、类型必须匹配于数组指定的类型
4、调用者可以显式地使用一个数组,而不是以逗号分隔的参数列表。
 
使用参数数组,我们可以将相同类型的、数量可变的多个参数付给一个方法。

 class Program
{
static void Main(string[] args)
{
string fullName;
fullName = Combine(Directory.GetCurrentDirectory(), "bin", "config", "index.html");
Console.WriteLine(fullName);
fullName = Combine(new string[] { Directory.GetCurrentDirectory(), "bin", "config", "index.html" });
Console.WriteLine(fullName);
Console.ReadLine();
}
static string Combine(params string[] paths)
{
string result = string.Empty;
foreach (string path in paths)
{
result = System.IO.Path.Combine(result, path);
}
return result;
} }
 
 
4.7方法重载
方法重载是一种操作性多态(编译时多态)
C#依据方法名、参数数据类型或者参数数量的不同来定义唯一性。
所以方法重载:方法名相同,参数数据类型或者参数数量不同。
 
4.8可选参数
通过在声明方法时,将常量赋值给参数,以后调用方法时就不必为此参数指定值。
必须从右向左实现可选参数。
 
C#4.0新增了另一个方法调用功能是命名参数,利用命名参数,调用者可显式指定参数名,并为该参数赋值
,而不是像以前那样只能依据参数顺序来决定哪个值赋值给哪个参数。
 

   class Program
{
static void Main(string[] args)
{
string firstName = "aaaaa", middleName = "bbbbbbbbb", lastName = "cccccccc";
string fullName;
fullName = Combine(firstName);
Console.WriteLine(fullName); fullName = Combine(pfirstName: firstName,plastName:lastName);
Console.WriteLine(fullName); fullName = Combine(pfirstName: firstName, pmiddleName: middleName);
Console.WriteLine(fullName); Console.ReadLine(); }
static string Combine(string pfirstName, string pmiddleName = ".", string plastName = "")
{
string result = pfirstName + pmiddleName + plastName; return result;
} }
 
4.9异常处理
try
throw
catch(多个
finally
一旦引发异常或者throw一个异常,后面的代码不会执行,会跳转到某个catch执行(可以有多个catch,有多个catch时,处理异常的类型从具体到到抽象依次顺序声明),
并且finally会永远执行,无论引发异常与否。

四、C#方法和参数的更多相关文章

  1. C# 本质论 第四章 方法和参数

    要为方法名使用动词或动词短语 递归:递归调用方法 方法重载: try catch

  2. C#中方法的参数的四种类型

    C#中方法的参数有四种类型:       1. 值参数类型  (不加任何修饰符,是默认的类型)       2. 引用型参数  (以ref 修饰符声明)       3. 输出型参数  (以out 修 ...

  3. JUC之线程池-三大方法-七大参数-四种拒绝策略

    线程池:重点 三大方法 七大参数 四种拒绝策略 使用池化技术的理由: 我们的程序伴随着创建销毁线程十分浪费资源, 所以使用线程池,先创建线程,随用随取,用完归还 简单来说就是节约了资源. 使用线程池的 ...

  4. CLR via C#深解笔记四 - 方法、参数、属性

    实例构造器和类(引用类型) 构造器(constructor)是允许将类型的实例初始化为良好状态的一种特殊方法.构造器方法在“方法定义元数据表”中始终叫.ctor. 创建一个引用类型的实例时: #1, ...

  5. 运行jar应用程序引用其他jar包的四种方法

    转载地址:http://www.iteye.com/topic/332580 大家都知道一个java应用项目可以打包成一个jar,当然你必须指定一个拥有main函数的main class作为你这个ja ...

  6. Angular--页面间切换及传值的四种方法

    1. 基于ui-router的页面跳转传参(1) 在AngularJS的app.js中用ui-router定义路由,比如现在有两个页面,一个页面(producers.html)放置了多个produce ...

  7. C#播放声音的四种方法 +AxWindowsMediaPlayer的详细用法

    C#播放声音的四种方法 第一种是利用DirectX 1.安装了DirectX SDK(有9个DLL文件).这里我们只用到MicroSoft.DirectX.dll和 Microsoft.Directx ...

  8. PHP面向对象.__set(),__get(),__isset(),__unset()四个方法的

    一般来说,总是把类的属性定义为private,这更符合现实的逻辑.但是, 对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义了两个函数”__get()”和”__set()”来获取和赋值其属性 ...

  9. 【AS3】Flash与后台数据交换四种方法整理

    随着Flash Player 9的普及,AS3编程也越来越多了,所以这次重新整理AS3下几种与后台数据交换方法.1.URLLoader(URLStream)2.FlashRemoting3.XMLSo ...

随机推荐

  1. 源代码安装GIT

    参考URL:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=25150840&id=4250659 若是条件允许,从源代 ...

  2. 使用next-key locks 用于搜索和索引扫描,可以防止幻读

    Next-Key Locks A next-key lock is a combination of a record lock on the index record and a gap lock ...

  3. sharepoint2007的中文版

    今天终于下载到了sharepoint2007的中文版了,以前微软的测试板也没有中文版,今天终于下载到了,经过测试,用英文版的sn也是可以用的.微软提供的测试版,输入正式的key,就可以变成正式版了.我 ...

  4. 《编写高质量代码——Web前端开发修炼之道》读后随笔

    结构样式行为的分离 结构标准包括XML标准.XHTML标准.HTML标准:样式标准有CSS标准:行为标准主要包括DOM标准和ECMAScript标准. 通常的项目会按照如上的方式进行分离,但自己曾今做 ...

  5. C++使用模版技术将任意类型的数据转为某个类型的数据

    将任意类型(int, float, 自定义的数据类型等等)的数据转换的某个类型C中储存,可以通过 将类型C的构造函数写成模版函数的形式,在C中将可以接收任意类型数据.如: class C{ templ ...

  6. [Locked] Alien Dictionary

    Alien Dictionary There is a new alien language which uses the latin alphabet. However, the order amo ...

  7. Codeforces Round #333 (Div. 1)--B. Lipshitz Sequence 单调栈

    题意:n个点, 坐标已知,其中横坐标为为1~n. 求区间[l, r] 的所有子区间内斜率最大值的和. 首先要知道,[l, r]区间内最大的斜率必然是相邻的两个点构成的. 然后问题就变成了求区间[l, ...

  8. 在eclipse下编译hadoop2.0源码

    Hadoop是一个分布式系统基础架构,由apache基金会维护并更新.官网地址: http://hadoop.apache.org/ Hadoop项目主要包括以下4个模块: Hadoop Common ...

  9. 安装完sql server 后修改计算机名后不能进行发布的订阅的解决办法

    由于需要需要配置一个发布订阅,可是一直报告:" sql server 复制需要有实际的服务器名称才能连接到服务器,不支持通过别名.ip地址或其他任何备用名称进行连接.请指定实际的服务器名称“ ...

  10. Fluent-EDEM耦合计算颗粒流动

    虽然说Fluent提供了很多方法用于处理颗粒在流体中的运动行为,然而这些方法都有其各自的适用性.DPM适用于稀薄颗粒的情况,欧拉模型.Mixture模型及DDPM模型虽然可以考虑稠密颗粒相,但并不能考 ...