![](/img/trans.png)
[英]C# public variable as writeable inside the class but readonly outside the class
[英]Public variable inside a class
關於公共變量如何在類中工作,我有點困惑。 我知道可以在不調用類的情況下訪問公共變量,而私有變量則不能。
如果您有多個同一個類的實例,並且每個實例都為公共變量賦予不同的值,那么我假設每個類實例都有自己唯一的變量版本,每個變量都有不同的值。
我的困惑是這個
如果在不調用類的新實例的情況下更改公共變量的值會發生什么?
如果沒有先調用類,那么該類的所有未來新實例是否都將該變量設置為您設置的任何值? 如果不是那么會發生什么?
我認為你以某種方式混淆了公共變量和靜態變量。 以下聲明:
可以在不調用類的情況下訪問公共變量
對於非靜態變量來說,完全是明顯錯誤的,可能是私有的還是公開的。
如果更改類實例的公共變量,它將僅更改該實例 ,對其他現有實例或將來的實例無任何影響。
另一方面,靜態變量確實可以在沒有類實例的情況下調用,並且更改它們具有“全局”效果,與類實例無關。
(如果您有任何特定的代碼,需要進一步的指導,請發布)
在像C#這樣的語言中,你無法做到這一點。
訪問類本身的任何(非靜態)變量而不是它的實例
會導致編譯器錯誤。
也許一些示例代碼會有所幫助; 私有變量無法訪問,所以我猜你的術語變得混亂了。 在下面的示例中,PublicStaticInt屬性聲明為static; 簡而言之,這意味着您的AppDomain中只有一個副本。 創建的每個ExampleClass實例都引用它的相同副本。 PublicInt屬性是一個實例屬性; 這意味着ExampleClass的每個實例都有自己的那段數據副本。
public class ExampleClass
{
public static int PublicStaticInt { get; set; }
public int PublicInt { get; set; }
}
private static void Main(string[] args)
{
for (int i = 0; i < 5; i++)
{
var example = new ExampleClass();
Console.WriteLine("PublicStaticInt = " + ExampleClass.PublicStaticInt.ToString() + ", PublicInt = " + example.PublicInt);
ExampleClass.PublicStaticInt++;
}
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
當您創建同一個類的新實例時,每個實例都為每個數據成員都有自己的值。 例如
class A
{
public int a;
public int b;
public A()
{
a=0;
b=0;
}
}
當我像這樣創建A類的實例時
A a11 =new A();
A b11 = new A();
現在,如果我改變a11的值,它將永遠不會改變b11的值,如果我改變b11的值,它將永遠不會改變a11的值。
如果沒有先調用類,那么該類的所有未來新實例是否都將該變量設置為您設置的任何值? 如果不是那么會發生什么?
不,它們將設置為您在類的構造函數中設置的值。 在這種情況下,它將為每個類實例設置a和b的值等於零,因為它是構造函數完成的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.