技术开发 频道

C#本质;方法和参数

  参数声明

  参数的行为和命名规范与局部变量一摸一样。换言之,参数名采用的是camel大小写形式。另外,无法声明与所在方法的参数同名的局部变量,因为这会造成同名的两个“局部变量”。

  方法返回值声明

  在声明方法的时候,在方法名之前添加一个数据类型,而返回值类型必须跟所添加的数据类型保持一致,虽然一个方法可以有多个参数,但返回值只能有一个。一旦方法指定了返回值类型,而且假定没有错误发生,那么在具体实现这个方法的时候,就必须为每个代码路径指定一个return语句,return语句以return开头,后跟这个方法要返回的值。

  return语句并非只能在方法实现的末尾出现。相反,只要方法包括返回类型,每个代码路径都应该有一个return语句。

  return语句意味着跳到方法的末尾,所以它在switch语句中可以代替break。一旦执行到return,方法调用就会终止。

  指定void作为返回类型,表示方法没有返回值。所以,无法将这种方法的“返回值”赋给一个变量,也无法把它的“返回值”作为参数使用。除此之外,在void类型方法的内部,return是可有可无的。如果你真的指定了return,那么return关键字之后不应该有任何值。

  嵌套的using指令

  不仅可以在文件的顶部进行using声明,还可以在命名空间声明的顶部包含它们。

using System;using System.Collections.Generic;using System.Text;namespace ConsoleApplication1{    using System;  
using System.Collections.Generic;    
using System.Text;    
class Program  
{        
static void Main(
string[] args)             {                    
    }    
     }
}

   在文件的顶部放置using指令和在namespace声明的顶部放置using指令的区别在于,后者的using指令只在你声明的那个命名空间中有效。

  还可以利用using指令为命名空间或类型取一个别名。别名是在using指令所在的那个范围内可以使用的一个替代名称。之所以要使用别名,两个最常见的原因是:消除同名的两个类型的歧义和缩写一个长名称。

//两个不同的using指令中都包含Timer的类型using System.Timers;using System.Threading;namespace ConsoleApplication1{  
class Program  
  {        static void Main(
string[] args)        
{          
//在编译时,会提示你两个指令中的不明确引用            Timer t = new Timer();      
    }  
  }
}

   Main()的返回值和参数

  C#支持在执行一个程序时提供命令行参数,并允许从Main()方法返回一个状态标识符。

  “运行时”会通过一个string数组参数将命令行参数传给Main()。要获取参数,访问数组就可以了。虽然所有命令行参数都可以通过一个字符串数组传给Main(),但我们有时候可能需要从一个不同于Main()的方法中访问那些参数。在这种情况下,可以使用System.Environment.GetCommandLineArgs()方法。该方法采取和Main(string[] args)将参数传给Main()一样的方式来返回命令行参数。

  假如一个程序包含的两个类都有Main()方法,那么可以在命令行上指定具体是哪一个类包含了程序的入口点。利用csc.exe的/m选项开关,可以指定包含Main()的那个类的完全限定类名。

  调用栈和调用点

  随着程序复杂程度的提高,每个方法调用另一个方法时,这个调用栈都会变大。然后,当调用结束时,调用栈会发生收缩,直到调用另一系列的方法。我们用栈展开这个词来描述从调用栈中删除调用的过程。栈展开的顺序通常与方法调用的顺序相反。一个方法调用完毕之后,会将控制权返回给调用点,也就是最初发出方法调用的那个位置。

0
相关文章