C#在函数外无法更改的变量

时间:2016-10-25 09:33:11

标签: c#

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

private void SetVariable(){
    privatetypevariable variable = "hello";
}

variable = "world"; //<-- doesnt work because it cannot access the variable 'variable' inside SetVariable()

如何访问上述方法范围之外的变量?

3 个答案:

答案 0 :(得分:2)

不是在方法中声明变量,而是将其定义为类字段。然后你可以从课堂内的任何地方改变它。字段通常标记为私有,因此无法在课外进行更改。如果要在类外部公开它,请使用属性而不是公共类型。

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

void someOtherMethod()
{
    fielda = fielda + " world"; 
}

答案 1 :(得分:0)

由于变量仅存在于其给定范围内,因此只要退出范围,变量就会丢失,这是不可能的。 要添加,您不能将可见性修饰符添加到方法

中声明的变量

下面的代码不起作用,因为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; 
    }

}

答案 2 :(得分:0)

如果在函数内部指定变量,则其范围仅限于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