不能在函数之外更改的变量
本文关键字:变量 函数 不能 | 更新日期: 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