C# int字段的默认值是否为0?
我有一个控制台应用程序,代码如下:C# int字段的默认值是否为0?,c#,console-application,C#,Console Application,我有一个控制台应用程序,代码如下: using System; namespace HeadfirstPage210bill { class Program { static void Main(string[] args) { CableBill myBill = new CableBill(4); Console.Write
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;
}
}
}
控制台正在返回以下内容:
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时的情况。当然,这只能在设置了折扣属性时发生,但是如果调用属性折扣,那么变量iGotChanged
应该返回1或2,但它似乎保持在0。因为它是类型int
,payPerViewDiscount
是否有默认值0 是int的默认值是0
您可以使用关键字进行检查
t
将准确地保持0
int
默认值为0
是,零是int的默认值。类中的字段在构造函数运行之前初始化为其默认值。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'"
}
}
+1谢谢-我想可能是这样,但它似乎有点违背了语言类型安全严格性的强大类型安全基础?怎么会呢?我并没有正确地表达它…这似乎是一个非常严格的语言,但这个默认值似乎与严格相反。。。我说得有道理吗?默认值是指定相同类型的默认值,所以我认为这很好,通常在指定值之前不能使用它,因为它是类中的一个字段,它将被分配
默认值
值感谢对局部变量的额外注意-我怀疑我可能会在将来对此挠头