日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > C# >内容正文

C#

(原创)c#学习笔记06--函数02--变量的作用域01--其他结构中变量的作用域

發(fā)布時(shí)間:2023/12/10 C# 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (原创)c#学习笔记06--函数02--变量的作用域01--其他结构中变量的作用域 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

6.2? 變量的作用域

  在上一節(jié)中,讀者可能想知道為什么需要利用函數(shù)交換數(shù)據(jù)。原因是C#中的變量?jī)H能從代碼的本地作用域訪問(wèn)。給定的變量有一個(gè)作用域,訪問(wèn)該變量要通過(guò)這個(gè)作用域來(lái)實(shí)現(xiàn)。

  在上一節(jié)中,讀者可能想知道為什么需要利用函數(shù)交換數(shù)據(jù)。原因是C#中的變量?jī)H能從代碼的本地作用域訪問(wèn)。給定的變量有一個(gè)作用域,訪問(wèn)該變量要通過(guò)這個(gè)作用域來(lái)實(shí)現(xiàn)。代碼如下:

class Program { static void Write() { Console.WriteLine("myString = {0}", myString); } static void Main(string[] args) { string myString = "String defined in Main()"; Write(); Console.ReadKey(); } }

  編譯代碼,注意顯示在任務(wù)列表中的錯(cuò)誤和警告:

當(dāng)前上下文中不存在名稱“myString”【The name 'myString' does not exist in the current context】 變量“myString”已賦值,但其值從未使用過(guò)【The variable 'myString' is assigned but its value is never used】

  什么地萬(wàn)出錯(cuò)了?不能在Write()函數(shù)中訪問(wèn)在應(yīng)用程序主體(Main()函數(shù))中定義的變量myString。

  原因是變量是有作用域的,在這個(gè)作用域中,變量才是有效的。這個(gè)作用域包括定義變量的代碼塊和直接嵌套在其中的代碼塊。函數(shù)中的代碼塊與調(diào)用它們的代碼塊是不同的。在Write()中,沒(méi)有定義myString,在Main()中定義的myString則超出了作用域——它只能在Main()中使用。

  實(shí)際上,在Write()中可以有一個(gè)完全獨(dú)立的變量myString,修古代碼,如下所示:

class Program { static void Write(){ string myString = "String defined in Write()"; Console.WriteLine("Now in Write()"); Console.WriteLine("myString = {0}", myString); } static void Main(string[] args) { string myString = "String defined in Main()"; Write(); Console.WriteLine("\nNow in Main()"); Console.WriteLine("myString = {0}", myString); Console.ReadKey(); } }

  運(yùn)行后可以看到結(jié)果。

  這段代碼執(zhí)行的操作如下:
??   Main()定義和初始化字符串變量myString。
??   Main()把控制權(quán)傳送給Wri。
??   Write()定義和初始化字符串變量myString,它與Main()中定義的myString變量完全不同。
??   Write()把一個(gè)字符串輸出到控制臺(tái)上,該字符串包含在Write()中定義的myString的值。
??   Write()把控制僅傳送回Main()。
??   Main()把一個(gè)字符串輸出到控制臺(tái)上,該字符串包含在Main()中定義的myString的值。

  其作用域以這種方式覆蓋一個(gè)函數(shù)的變量稱為局部變量。還有一種全局變量,其作用域可覆蓋多個(gè)函數(shù)。修改代碼,如下所示:

class Program { static string myString; static void Write() { string myString = "String defined in Write()"; Console.WriteLine("Now in Write()"); Console.WriteLine("Local myString = {0}", myString); Console.WriteLine("Global myString = {0}", Program.myString); } static void Main(string[] args) { string myString = "String defined in Main()"; Program.myString = "Global string"; Write(); Console.WriteLine("\nNow in Main()"); Console.WriteLine("Local myString = {0}", myString); Console.WriteLine("Global myString = {0}", Program.myString); Console.ReadKey(); } }

  這里添加了另一個(gè)變量myString,這次進(jìn)一步加深了代碼中的名稱層次。這個(gè)變量定義如下:

static string myString;

  注意,這里也需要static關(guān)鍵字。在這種類型的控制臺(tái)應(yīng)用程序中,必須使用static或const關(guān)鍵字,來(lái)定義這種形式的全局變量。如果要修改全局變量的值,就需要使用static,因?yàn)閏onst禁止修改變量的值。

  為了區(qū)分這個(gè)變量和Main()與Write()中的同名局部變量,必須用一個(gè)完整限定的名稱為變量名分類。這里把全局變量稱為Program.myString。注意,在全局變量和局部變量同名時(shí),這是必需的。如果沒(méi)有局部myString變量,就可以使用myString表示全局變量,而不需要使用Program.myString。如果局部變量和全局變量同名,全局變量就會(huì)被屏蔽。

  是否使用全局變量取決于函數(shù)的位置。使用全局變量的問(wèn)題在于,它們通常不適合于“常規(guī)用途”的函數(shù)——這些函數(shù)能處理我們所提供的任意數(shù)據(jù),而不僅限于處理特定全局變量中的數(shù)據(jù)。

?

6.2.1? 其他結(jié)構(gòu)中變量的作用域

  變量的作用域包含定義它們的代碼塊和直接嵌套在其中的代碼塊。這也可以應(yīng)用到其他代碼塊上,例如分支和循環(huán)結(jié)構(gòu)的代碼塊。考慮下面的代碼:

int i; for (i = 0; i < 10; i++) { string text = "Line " + Convert.ToString(i); Console.WriteLine("{0}", text); } Console.WriteLine("Last text output in loop: {0}", text);

  字符串變量text 是for 循環(huán)的局部變量,這段代碼不能編譯,因?yàn)樵谠撗h(huán)外部調(diào)用的Console.WriteLine()試圖使用該變量text,這超出了循環(huán)的作用域。修改代碼,如下所示:

int i; string text; for (i = 0; i < 10; i++) { text = "Line " + Convert.ToString(i); Console.WriteLine("{0}", text); } Console.WriteLine("Last text output in loop: {0}", text);

  這段代碼也會(huì)失敗,原因是必須在使用變量前對(duì)其進(jìn)行聲明和初始化,而text 是在for循環(huán)中初始化的。賦給text的值在循環(huán)塊退出時(shí)就丟失了。但是還可以進(jìn)行如下修改:

int i; string text = ""; for (i = 0; i < 10; i++) { text = "Line " + Convert.ToString(i); Console.WriteLine("{0}", text); } Console.WriteLine("Last text output in loop: {0}", text);

  只聲明一個(gè)簡(jiǎn)單變量類型,并不會(huì)引起其他的變化。只有在給變量賦值后,這個(gè)值才占用一塊內(nèi)存空間。如果這種占據(jù)內(nèi)存空間的行為在循環(huán)中發(fā)生,該值實(shí)際上定義為一個(gè)局部值,在循環(huán)的外部會(huì)超出了其作用域。

  即使變量本身沒(méi)有局部化到循環(huán)上,循環(huán)所包含的值也局部化到該循環(huán)上。但是,在循環(huán)外部賦值可以確保該值是主體代碼的局部值,在循環(huán)內(nèi)部它仍處于其作用域中。這意味著變量在退出主體代碼塊之前是沒(méi)有超出作用域的,所以可以在循環(huán)外部訪問(wèn)它的值。

  最后一個(gè)要注意的問(wèn)題是,應(yīng)采用“最佳實(shí)踐方式”。一般情況下,最好在聲明和初始化所有變量后,再在代碼塊中使用它們。一個(gè)例外是把循環(huán)變量聲明為循環(huán)塊的一部分,例如:

for (int i = 0; i < 10; i++) { ... }

?

轉(zhuǎn)載于:https://www.cnblogs.com/wodehao0808/p/4912236.html

總結(jié)

以上是生活随笔為你收集整理的(原创)c#学习笔记06--函数02--变量的作用域01--其他结构中变量的作用域的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。