假设我有以下代码:
protected void ReservationForm()
{
double x = 50;
double tva = 1.196;
double totalAmount = 0;
totalAmount = x * tva;
ltrl_showText = "Total Amount is " + totalAmount;
}
protected void btn_submit_Click(object sender, EventArgs e)
{
ltrl_previewText = "You ordered nameProduct at the price of " + totalAmount ;
}
如何从上面的函数中获取变量totalAmount?
我知道使用Java我可以使用super()
执行此操作,并且我发现C#上的相等属性是base
但我不知道如何使用它。我试图将函数更改为public而不是protected,但我总是收到错误。
感谢您的时间。
编辑:我使用AJAX,这就是两个函数的总金额。第一个我需要它,因为总金额根据用户选择而变化,然后点击他看到预览页面。
答案 0 :(得分:2)
使用私人字段:
private double totalAmount;
protected void ReservationForm()
{
double x = 50;
double tva = 1.196;
this.totalAmount = x * tva;
ltrl_showText = "Total Amount is " + this.totalAmount;
}
protected void btn_submit_Click(object sender, EventArgs e)
{
ltrl_previewText = "You ordered nameProduct at the price of " + this.totalAmount ;
}
答案 1 :(得分:2)
而不是假装我可以解决你的问题,我并不觉得我有足够的信息要做,我会与你分享一个一般原则:干或不要重复自己。在您的情况下,您有一段代码要在两个地方使用。到目前为止,您的表现非常好,因为计算只能在一种方法中进行。这很好,符合DRY原则。
现在有些人会想要在两种方法之间剪切/粘贴代码。这会违反DRY原则,因为你有相同的代码重复,必须在两个地方维护它。更糟糕的是,他们可能会意外地分歧,并开始做不同的事情导致错误。您希望直接使用其他方法中的代码来避免陷阱。到目前为止,非常好。
下一步是重构以利用现有代码。这可能会变得棘手,因为您通常只想重用一部分代码。在您的情况下,我怀疑您在设置ltrl_showText
时并不总是想设置ltrl_previewText
。如果是这种情况,那么你应该引入第三种方法,前两种方法中的每一种都为这两种方法进行计算。
protected decimal CalculateAmount()
{
decimal x = 50;
decimal tva = 1.196;
decimal totalAmount = 0;
return x * tva;
}
protected void ReservationForm()
{
decimal totalAmount = CalculateAmount();
ltrl_showText = "Total Amount is " + totalAmount;
}
protected void btn_submit_Click(object sender, EventArgs e)
{
decimal totalAmount = CalculateAmount();
ltrl_previewText = "You ordered nameProduct at the price of " + totalAmount ;
}
现在,您可能认为我们已经完成了,但我发现这不是很有用。 totalAmount
始终相同。这似乎没有用。不过,在这一点上,我必须进入纯猜想的范畴。显然,用于函数的值来自代码中常量以外的某处,至少价格必须是税率。问题是这些来自ReservationForm
和按钮点击处理程序的相同位置。我怀疑没有,所以最合理的方法是让CalculateAmount
取一个或多个参数。
public decimal CalculateAmount( double cost )
{
decimal tva = 1.196;
return cost * tva;
}
protected void ReservationForm()
{
decimal cost = ...where do we get cost from? a database, a previous form, ???
decimal totalAmount = CalculateAmount(cost);
ltrl_showText = "Total Amount is " + totalAmount;
}
protected void btn_submit_Click(object sender, EventArgs e)
{
decimal cost = double.Parse( inp_ProductOrdered.Text ); // seems reasonable on a button click
decimal totalAmount = CalculateAmount(cost);
ltrl_previewText = "You ordered nameProduct at the price of " + totalAmount ;
}
现在唯一让我困扰的是税率来自哪里?这很可能取决于该人的订购地点。在这种情况下,您可能需要引入第四种方法,根据执行排序的人员的位置进行某种查找,并为该人员返回适当的税率。我会把它留作练习。
我不知道这是否可以解决您的问题,但这就是我将如何进行重构。考虑一下您可以分享的内容以及这些内容可以从哪里获取数据。摘要说明您可以使用最可重用的代码。
编辑:你真的应该使用decimal
(或自定义资金类型)而不是double
来赚钱, cf。,{ {3}}
答案 2 :(得分:1)
您可以像这样重新安排代码:
protected double ReservationForm()
{
double x = 50;
double tva = 1.196;
double totalAmount = 0;
totalAmount = x * tva;
return totalAmount;
}
protected void btn_submit_Click(object sender, EventArgs e)
{
double TotalAmount;
TotalAmount = ReservationForm();
ltrl_previewText = "You ordered nameProduct at the price of " + TotalAmount;
ltrl_showText = "Total Amount is " + TotalAmount;
}
答案 3 :(得分:0)
totalAmount
是一个局部变量。这意味着它只能从其方法中访问。
您可以将其改为字段,然后它将具有更广泛的范围。
protected double totalAmount;
protected void ReservationForm()
{
double x = 50;
double tva = 1.196;
totalAmount = x * tva;
ltrl_showText = "Total Amount is " + totalAmount;
}
当然,您需要确保在ReservationForm()
之前调用btn_submit_Click()
。
答案 4 :(得分:0)
如果后面的代码中有ReservationForm(),您可以将值分配给受保护的属性(可用于页面的asp.net设计部分),例如:
protected string reservationFormTotalAmount;
protected void ReservationForm()
{
double x = 50;
double tva = 1.196;
double totalAmount = 0;
totalAmount = x * tva;
reservationFormTotalAmount = "Total Amount is " + totalAmount;
}
并在用户界面中
ltrl_previewText = reservationFormTotalAmount;
答案 5 :(得分:0)
尝试将totalAmount
设为私有字段:
class foo {
private double totalAmount;
protected void ReservationForm()
{
double x = 50;
double tva = 1.196;
totalAmount = x * tva;
ltrl_showText = "Total Amount is " + totalAmount;
}
protected void btn_submit_Click(object sender, EventArgs e)
{
ltrl_previewText = "You ordered nameProduct at the price of " + totalAmount ;
}
}