我的程序中有一个与get / set函数有关的问题需要解决。
这里是完整的未编辑代码:https://pastebin.com/Vd8zC51m
编辑:我的好朋友找到了解决方案,就是这样使用“值”:
{
get
{
return this.returnValue;
}
set
{
if (value > 30)
{
this.returnValue = value - (value * 0.10f);
} else
{
this.returnValue = value;
}
}
}
很抱歉,如果我浪费了任何时间...!
问题如下: 设置“价格”属性,如果使用set / get设置的价格超过30,则价格降低10%。
我得到的是: 值为0。
我知道出了什么问题,我只是不知道如何解决。我知道它在set命令中。 显示代码后,您可能会更好地理解。
我尝试在互联网上搜索如何正确使用set命令,并尝试了执行set命令的其他方式。
public class Book
{
public string Name;
public string writerName;
public string bPublisher;
public float bPrice;
public string bTheme;
public float returnValue;
public Book(string name, string writer, string publisher, float price, string theme)
{
Name = name;
writerName = writer;
bPublisher = publisher;
bPrice = price;
bTheme = theme;
}
public float Price
{
get
{
return returnValue;
}
set
{
if (this.bPrice > 30)
{
returnValue = this.bPrice - (this.bPrice * 0.10f);
} else
{
returnValue = this.bPrice;
}
}
}
}
----------这些是从程序中剪切下来的主要部分----------------------
static void Main(string[] args)
{
Book k2 = new Book("A book", "O. Writer", "Publisher Ab", 36.90f, "Fantasy");
Console.WriteLine(k2.Price);
}
答案 0 :(得分:7)
因此,我们在这里有两个价格: net (例如45.00
)和降低的价格(45.00 - 4.50 == 41.50
)
public Book {
...
const Decimal PriceThreshold = 30.0m;
const Decimal ReducePerCent = 10.0m;
private Decimal m_NetPrice;
// Net price
// Decimal (not Single, Double) usually is a better choice for finance
public Decimal NetPrice {
get {
return m_NetPrice;
}
set {
if (value < 0)
throw new ArgumentOutOfRangeException(nameof(value));
m_NetPrice = value;
}
}
// Price with possible reduction
public Decimal Price {
get {
return NetPrice > PriceThreshold
? NetPrice - NetPrice / 100.0m * ReducePerCent
: NetPrice;
}
}
}
请注意,我们{em> set
的{{1}}属性没有;由于一个Price
(例如Price
对应两个有效的28.80
(NetPrice
或{{ 1}}:28.80
)
答案 1 :(得分:6)
为什么不将逻辑放入吸气剂中。似乎更有意义,因为您没有在设置器中使用32.00 - 3.20 == 28.80
:
([^.]*ALPHA[^.]*)([^.]*BETA[^.]*)
编辑:
一个简短的吸气剂看起来像这样,并且(由于Patrick Hofman),您可以通过乘以0.9来计算90%:
value
我将二传手设为私人。如果要在创建public float Price
{
get
{
if (this.bPrice > 30)
{
return this.bPrice - (this.bPrice * 0.10f);
}
else
{
return this.bPrice;
}
}
private set
{
this.bPrice = value
}
}
对象后也允许设置/操纵价格,请将其删除。
答案 2 :(得分:3)
您没有使用设置器来设置价格。请尝试以下。
public Book(string name, string writer, string publisher, float price, string theme)
{
Name = name;
writerName = writer;
bPublisher = publisher;
Price = price; // use the setter here, not the member variable
bTheme = theme;
}
如果将以下内容设为私有,则将为使用错误变量的人员提供额外的保护
private string Name;
private string writerName;
private string bPublisher;
private float bPrice;
private string bTheme;
private float returnValue;
您还应该考虑将价格设为小数,以避免浮点精度错误。
根据评论,您需要在媒体资源上做更多的工作
public float Price
{
get
{
return bPrice;
}
set
{
if (value > 30)
{
bPrice = value - (value * 0.10);
}
else
{
bPrice = value;
}
}
}
答案 3 :(得分:0)
问题是您需要在Book构造函数中设置Price
,如下所示:
public Book(string name, string writer, string publisher, float price, string theme)
{
Name = name;
writerName = writer;
bPublisher = publisher;
Price = price;
bTheme = theme;
}
然后在Price
的设置器中,您可以这样操作:
public float Price
{
get
{
return returnValue;
}
set
{
if (value > 30)
{
returnValue = value - (value * 0.10f);
}
else
{
palautus = value;
}
}
}