[英]Write only accessors in C#
所谓的只写访问器如何工作,例如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
。
顺便说一下,只写属性的样式不好(根据Microsoft的设计准则 )。 您可能应该改用一种方法。
如果您未初始化int
,则其默认值将等于0
int myInt = new int();
前面的语句与下面的语句具有相同的作用:
int myInt = 0;
在c#中,您可以使用default
关键字确定类型的默认值。
例如:
default(bool)
default(int)
default(int?)
所有原始类型如
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));
这是因为默认布尔值设置为false
,然后如果将将内部this.discount
设置为false
的路线进行检查,然后进入else将payPerViewDiscount
设置为0。应始终通过设置调用构造函数中的只写访问器默认值。
public bool Discount
{
set
{
this.discount = value;
if (this.discount)
this.payPerViewDiscount = 2;
else
this.payPerViewDiscount = 0;
}
}
您应该将default设置为this.Default
而不是基础属性。
public CableBill(int rentalFee)
{
this.rentalFee = rentalFee;
this.Discount = false;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.