1,传值和传引用
代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication3 { class Program { static void Main(string[] args) { string a = "NiHao"; SayAWord(a);//传值 Console.WriteLine("This Word is {0}", a); SayAWordAndEditWord(ref a);//传引用 Console.WriteLine("This Word is {0}", a); } static void SayAWord(string word)//值参数 { Console.WriteLine(word); word = "hahaha"; } static void SayAWordAndEditWord(ref string word) //引用参数 { Console.WriteLine(word); word = "hahaha"; } } }
运行结果:
注意:ref参数使用前必须初始化,ref引用必须变量 const int myNumber = 5; myNumber 就不行,因为是常数。
2,返回的另外一种方式。
除了用return方式返回值外,还可以用out方式返回调用结果
代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication3 { class Program { static void Main(string[] args) { string a = "NiHao"; string b; SayAWord(a,out b); //out方式可以不用初始化变量哦 Console.WriteLine("This Word is {0}", a); SayAWordAndEditWord(ref a); Console.WriteLine(b); Console.WriteLine("This Word is {0}", a); } static void SayAWord(string word,out string RtnValue)//不管是调用的时候还是定义的时候都不能忘了加上out字样,不然你就out咯! { Console.WriteLine(word); word = "hahaha"; RtnValue = "OK"; } static void SayAWordAndEditWord(ref string word) //引用参数 { Console.WriteLine(word); word = "hahaha"; } } }
运行结果:
3,使用委托来调用函数
委托是一种可以把引用存储为函数的类型。委托的声明类似于函数,但不带函数体,且要使用delegate关键字,委托的声明指定了一个函数签名,其中包含一个返回类型和参数列表。在定义了委托后,就可以声明该委托类型的变量。接着把这个变量初始化为与委托有相同签名的函数引用。之后,就可以使用委托变量调用这个函数,就像该变量是一个函数一样。有了引用函数的变量以后,还可以执行不能用其他方式完成的操作。例如:可以把委托变量作为一个参数传递给一个函数,这样,该函数就可以使用委托调用它引用的任何参数,而且在运行之前无需知道调用的是哪个函数。
代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication3 { class Program { delegate void ProcessDelegate(string temp);//委托的声明 static void Main(string[] args) { string a = "My PC"; ProcessDelegate process;//声明委托类型的变量 process = new ProcessDelegate(SayOK); process(a); process = new ProcessDelegate(SayNo);//动态改变引用的函数。 process(a);//无论委托引用的是什么函数调用方式都一样。 } static void SayOK(string word) { Console.WriteLine(word+" is OK"); } static void SayNo(string word) //引用参数 { Console.WriteLine(word + " is No"); } } }
运行结果:
注意:委托有很多用途,他们的大多数用途主要与事件处理有关。