问题1.为什么行bool male = false;初始化为假?这对我来说似乎无关紧要,因为该程序后来决定它是真是假。
在这种情况下,你是对的它是无关紧要的。但是在某些情况下,变量被初始化为一个值,因为这将是默认值。例如,有人可能会这样做:
bool overtime = false;
if (hours > 40)
{
overtime = true;
}
在上面没有别的。如果hours
不超过40则不会超时。
问题2. Random random = new Random();为什么你必须初始化这个新的Random(),不随机随机创建随机类型的随机变量?
实际上Random random
不会创建变量。它声明类型为Random
的变量名为random
。该变量默认为null
。一旦你这样做:
Random random = new Random();
现在变量持有至实例Random
参考。在某些情况下,人们这样做,如果一个类从另一个类派生:
public class ClassA
{
public virtual void DoSomething()
{
Console.WriteLine("Hello");
}
}
public class ClassB : ClassA
{
public override void DoSomething()
{
base.DoSomething();
Console.WriteLine(" World!");
}
}
ClassA a = null;
后来在基地上的一些决定,他们可以这样做:
if (somecondition)
{
a = new ClassB();
}
else
{
a = new ClassA();
}
这给你的多态性,因为引用类型ClassA
,但对象实例类型为ClassB
或ClassA
,具体取决于条件。现在你可以做到这一点无论它是ClassA
或ClassB
一个实例:
a.DoSomething();
根据不同的情况下,a.DoSomething()
要么写你好或的Hello World!
List <ClassA> list = new List<ClassA>();
list.Add(new ClassA());
list.Add(new ClassB());
foreach (var thisClass in list)
{
thisClass.DoSomething();
}
在上面我创建的ClassA
一个List
,然后加入ClassA
和ClassB
实例,然后循环他们,并呼吁DoSomething()
:当你做这样的事情
的好处是更明显在他们。
试试吧,你会看到这是多么的灵活。
Q1:Spot on。这是一个冗余初始化。声明和初始化可以在随机随机行之后的同一行完成。 – spender
不应该在'http:// codereview.stackexchange.com /'上询问像这样的问题吗? –
@LucMorin [Nope](http://codereview.stackexchange.com/help/on-topic) – DavidG