我有一个控制台应用程序,其中包含以下代码:
using System;
namespace HeadfirstPage210bill
{
class Program
{
static void Main(string[] args)
{
CableBill myBill = new CableBill(4);
Console.WriteLine(myBill.iGotChanged);
Console.WriteLine(myBill.CalculateAmount(7).ToString("£##,#0.00"));
Console.WriteLine("Press enter to exit");
Console.WriteLine(myBill.iGotChanged);
Console.Read();
}
}
}
CableBill.cs类如下:
using System;
namespace HeadfirstPage210bill
{
class CableBill
{
private int rentalFee;
public CableBill(int rentalFee) {
iGotChanged = 0;
this.rentalFee = rentalFee;
discount = false;
}
public int iGotChanged = 0;
private int payPerViewDiscount;
private bool discount;
public bool Discount {
set {
discount = value;
if (discount) {
payPerViewDiscount = 2;
iGotChanged = 1;
} else {
payPerViewDiscount = 0;
iGotChanged = 2;
}
}
}
public int CalculateAmount(int payPerViewMoviesOrdered) {
return (rentalFee - payPerViewDiscount) * payPerViewMoviesOrdered;
}
}
}
控制台返回以下内容:
当payPerViewDiscount
设置为0时,我看不到。当然,这只能在设置了Discount属性时发生,但如果调用属性Discount,则变量iGotChanged
应该返回1或2,但它似乎保持为0.因为类型为int
,payPerViewDiscount
的默认值是0吗?
答案 0 :(得分:10)
答案 1 :(得分:3)
在构造函数运行之前,类中的字段被初始化为其默认值。 int的默认值为0.
请注意,这不适用于本地变量,例如在方法。它们不会自动初始化。
public class X
{
private int _field;
public void PrintField()
{
Console.WriteLine(_field); // prints 0
}
public void PrintLocal()
{
int local;
Console.WriteLine(local);
// yields compiler error "Use of unassigned local variable 'local'"
}
}
答案 2 :(得分:2)
完全。 int
默认值为0
。
答案 3 :(得分:2)
是,零是int的默认值。