問題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