C#中的只读访问器
本文关键字:读访问 | 更新日期: 2023-09-27 18:11:37
所谓的只读访问器是如何工作的,例如Discount
?
class CableBill
{
private int rentalFee;
private int payPerViewDiscount;
private bool discount;
public CableBill(int rentalFee)
{
this.rentalFee = rentalFee;
discount = false;
}
public bool Discount
{
set
{
discount = value;
if (discount)
payPerViewDiscount = 2;
else
payPerViewDiscount = 0;
}
}
public int CalculateAmount(int payPerViewMoviesOrdered)
{
return (rentalFee - payPerViewDiscount) * payPerViewMoviesOrdered;
}
}
当我写时
CableBill january = new CableBill(4);
MessageBox.Show(january.CalculateAmount(7).ToString());
返回值为28
我的问题是:
程序如何知道payPerViewDiscount=0
?初始化对象时,我从未使用过Discount
属性
类的所有成员都会自动使用其类型的default
值进行初始化。对于int
,这是0
。
顺便说一句,只写属性是不好的风格(根据微软的设计准则(。您可能应该使用一种方法。
如果没有初始化int
,其默认值将等于0
int myInt = new int();
上述声明与以下声明具有同等效力:
int myInt = 0;
默认值表
在c#中,可以使用default
关键字来确定类型的默认值。
例如:
default(bool)
default(int)
default(int?)
这是因为默认bool设置为false
,然后if执行将内部this.discount
设置为false的路线,进行检查并进入将payPerViewDiscount
设置为0的else。应该始终通过设置默认值来调用构造函数中的只读访问器。
public bool Discount
{
set
{
this.discount = value;
if (this.discount)
this.payPerViewDiscount = 2;
else
this.payPerViewDiscount = 0;
}
}
您应该将默认值设置为this.Default
,而不是基础属性。
public CableBill(int rentalFee)
{
this.rentalFee = rentalFee;
this.Discount = false;
}
所有基元类型如
int、double、long等
自动分配默认值。
default value for int=0;
default value for char=''0';
default value for char=''0';
例如,您不知道某个基元类型的默认值你可以像这个一样访问它们
public void PassDefaultValues(bool defaultBool, DateTime defaultDateTime)
{
// Nothing
}
你可以这样称呼它
public void PassDefaultValues(default(bool), default(DateTime));