[英]Why public variables are not allowed inside a method or any block except class in c#?
我遇到的一個非常奇怪的問題是,當我嘗試在類的方法中使用 public 關鍵字聲明string
類型的變量 say 時,編譯器會在沒有正確解釋的情況下拋出編譯時錯誤。
考慮下面的一段代碼:
public class MyClass
{
public string publicVarInClass= null; // No error here. Works fine
public void MyMethod()
{ // Error shown here is "Expected } "
public string publicVarInMethod = null; // not allowed, but no error is shown in this line. WHY?
try // Error shown here is Invalid token 'try' in class, struct or interface declaration
{
//some code here
}
}
}
根據我的考慮,當我們在方法中將變量 decalre 為 public 時,它除了該方法是類、結構或接口。
這就是我的問題,為什么 C# 限制我們將變量聲明為 public 內部方法。 它有什么問題?
變量和字段之間存在差異。 只有字段具有訪問保護,而變量在方法主體之外根本無法訪問。
C# 中的“公共變量”稱為fields 。 C# 允許字段聲明僅出現在類或結構體中。 字段是對象定義的一部分,它們要么附加到實例,要么在所有實例之間共享。
另一方面,方法內部的變量不是字段。 作為方法主體的本地,它們不需要訪問保護。 它們的生命周期和范圍在方法內部受到限制,因此該方法之外的任何代碼都無法訪問局部變量。
這與范圍有關,我們不會在方法的范圍內為變量提供訪問修飾符,該變量只能在該方法中訪問,而不能在其他任何地方訪問,我們將訪問修飾符(公共私有保護)添加到屬性/字段一個班級。
供參考 Public 對其他對象具有全局可用性 Private 只能在該類或該類的對象內訪問 Protected 可從該類或子類內訪問
在方法內部,您聲明的任何變量只能在該方法內訪問,它稱為局部變量。 訪問修飾符(公共、私有等)在這里沒有意義,因為變量不會存在於方法范圍之外。
如果你想要一個方法來設置你的公共變量以便在別處訪問,你可以給它賦值,但你不能在你的方法中聲明一個公共變量。
首先回答自己一個問題 - 你想如何在方法之外訪問這個變量?
你問的是OOP的基礎知識。 類具有對這些字段進行操作的字段/屬性和方法。
因為這個變量生命周期只有在方法開始和結束時才開始和結束。 程序看不到方法內的變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.