从其他函数获取变量

时间:2011-11-26 14:42:13

标签: c# asp.net variables get

假设我有以下代码:

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,这就是两个函数的总金额。第一个我需要它,因为总金额根据用户选择而变化,然后点击他看到预览页面。

6 个答案:

答案 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 ;    
    }   

}