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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

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

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

6.2? 變量的作用域

  在上一節中,讀者可能想知道為什么需要利用函數交換數據。原因是C#中的變量僅能從代碼的本地作用域訪問。給定的變量有一個作用域,訪問該變量要通過這個作用域來實現。

  在上一節中,讀者可能想知道為什么需要利用函數交換數據。原因是C#中的變量僅能從代碼的本地作用域訪問。給定的變量有一個作用域,訪問該變量要通過這個作用域來實現。代碼如下:

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

  編譯代碼,注意顯示在任務列表中的錯誤和警告:

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

  什么地萬出錯了?不能在Write()函數中訪問在應用程序主體(Main()函數)中定義的變量myString。

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

  實際上,在Write()中可以有一個完全獨立的變量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(); } }

  運行后可以看到結果。

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

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

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(); } }

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

static string myString;

  注意,這里也需要static關鍵字。在這種類型的控制臺應用程序中,必須使用static或const關鍵字,來定義這種形式的全局變量。如果要修改全局變量的值,就需要使用static,因為const禁止修改變量的值。

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

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

?

6.2.1? 其他結構中變量的作用域

  變量的作用域包含定義它們的代碼塊和直接嵌套在其中的代碼塊。這也可以應用到其他代碼塊上,例如分支和循環結構的代碼塊。考慮下面的代碼:

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 循環的局部變量,這段代碼不能編譯,因為在該循環外部調用的Console.WriteLine()試圖使用該變量text,這超出了循環的作用域。修改代碼,如下所示:

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);

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

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);

  只聲明一個簡單變量類型,并不會引起其他的變化。只有在給變量賦值后,這個值才占用一塊內存空間。如果這種占據內存空間的行為在循環中發生,該值實際上定義為一個局部值,在循環的外部會超出了其作用域。

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

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

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

?

轉載于:https://www.cnblogs.com/wodehao0808/p/4912236.html

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。