不能在函数之外更改的变量

本文关键字:变量 函数 不能 | 更新日期: 2023-09-27 18:14:51

是否有可能在被调用的函数内部声明变量,并且没有外部源可以更改该变量?例如:

private void SetVariable(){
    privatetypevariable variable = "hello";
}
variable = "world"; //<-- doesnt work because it cannot access the variable 'variable' inside SetVariable()

如何访问上述方法作用域之外的变量?

不能在函数之外更改的变量

不要在方法中声明变量,而是将其定义为一个类字段。然后,您可以在类中的任何位置更改它。字段通常被标记为私有,因此不能在类之外更改。如果您想在类外部公开它,请使用带有公共类型的属性。

private privatetype fielda;
void methodA(){
    fielda = "hello";
}
void someOtherMethod()
{
    fielda = fielda + " world"; 
}

这是不可能的,因为变量只存在于给定的范围内,一旦退出该范围,该变量就丢失了。更重要的是,你不能给方法

中声明的变量添加可见性修饰符。

下面的代码不起作用,因为s只存在于methodA()的作用域中,一旦退出作用域就会丢失。

private void methodA(){
    String s = "hello";
}
private void methodB(){
    s = s + " world"; //even tho methodA created an s variable, it doesn't exist in the eyes of methodB
}

你可以这样做:

class someClass{
    private String s;
    public someClass(){
        s = "hello world";
    }
    public String getVariable(){ //you can read this variable, but you can't set it outside of this class.
        return s; 
    }

}

如果你在函数中指定了一个变量,那么在c#中它的作用域仅为该函数。

示例1:

    private void foo(string bar)
    {
       string snark = "123";
    }
    private void derk()
    {
       snark = "456";
    }

示例1将导致编译错误。如果你的意思是在一个类中,将属性声明为readonly,并且它不能在它的初始构造函数之外更改。

示例2:

    public class Lassy
    {
       private readonly string _collarColour;
       public Lassy(string collarColour)
       {
          _collarColour = collarColour;
       }
       private void SetCollarColour(string newColour)
       {
          _collarColour = newColour;
       }
    }

示例2也会导致编译错误,因为您不能在类的初始构造函数之外分配readonly属性。

要达到你想要的,使用readonly