我是C#的新手,并且在变量范围方面遇到了一些麻烦。
if(number > 10)
{
int someNr = 5;
}
else
{
/* .... */
}
if(number2 < 50)
{
someNr = 10; /* PRODUCES AN ERROR */
}
else
{
/* ........ */
}
我知道如果数字不是&gt; 10然后someNr将不会被声明为int。但是我应该写两次intNr?如果两个if
都是真的怎么办?双重声明?如果我在if
?
类变量
PHP
class TEST {
private $test = 'test';
private function testVariable(){
/* Not declared */
echo $test;
}
private function testVariable2(){
/* echo 'test' */
echo $this->test;
}
}
C#
class TEST {
private string test = "test";
private void testVariable(){
/* takes the value of class variable test */
test;
}
private function testVariable2(){
/* takes also the value of class variable 'test' */
this.test;
}
}
但是如果
C#
class TEST {
private string test = "test";
private void testVariable(){
string test = "somethingOther";
Console.WriteLine(test);
}
}
测试是&#34;测试&#34;或&#34; somethingOther&#34;?
哪个优先?类变量或本地方法变量?
答案 0 :(得分:1)
您的第一个示例会产生错误,因为someNr
仅在if
语句的范围内定义。您必须在第二个if
中重新定义它,并将其声明为int
。
在第二个示例中,正确的语法为Console.WriteLine(test);
。您的输出将是&#39; somethingOther&#39;,因为将使用内部范围中的test
。
答案 1 :(得分:1)
要在if
语句中设置变量,您应该在if
语句之外声明它,否则它将是仅在if
语句中可用的局部变量:
int someNr;
if(number > 10)
{
someNr = 5;
}
else
{
/* .... */
}
if(number2 < 50)
{
someNr = 10;
}
else
{
/* ........ */
}
注意:您还需要在else
块中为变量设置一些值,或者在定义时设置初始值,否则不知道总是有值。
在你的班级TEST
中,局部变量会影响班级成员:
class TEST {
private string test = "test"; // this is a member of the class
private void testVariable(){
string test = "somethingOther"; // this is a local variable that shadows the class member
Console.WriteLine(test); // this will use the local variable, it can't see the class member
}
}
答案 2 :(得分:1)
方法范围的示例 - 变量someNr
在方法中声明(以及number2
),因此可以在整个方法中访问:
public class IntegersTestScope
{
public void TestIntegers(int number)
{
int number2 = 0;
int someNr = 0;
number2 += number;
if (number > 10)
{
someNr = 5;
}
else
{
/* .... */
}
if (number2 < 50)
{
someNr = 10; /* This will no longer PRODUCE AN ERROR */
}
else
{
/* ........ */
}
Console.WriteLine("someNr={0}", someNr.ToString());
}
}
类范围的示例 - 变量_someNr
在类中声明,因此可以被该类的所有方法访问(注意:变量_someNr
以下划线为前缀字符'_'作为命名约定只表示变量全局到类,并且代码不需要工作):
public class IntegersTestScope
{
private int _someNr = 0;
public void TestIntegers(int number)
{
int number2 = 0;
number2 += number;
if (number > 10)
{
_someNr = 5;
}
else
{
/* .... */
}
if (number2 < 50)
{
_someNr = 10; /* This will no longer PRODUCE AN ERROR */
}
else
{
/* ........ */
}
Console.WriteLine("someNr={0}", _someNr.ToString());
}
}