打印

[.net] 为什么类的值会重置为零??

调一下这段代码,不会报错但是结果不对,在前台页加四个文本和一个按钮就可以了。先谢过了!
复制内容到剪贴板
代码:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class Cal : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
           
           
        }
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        //double n1 = Convert.ToDouble(TxtN1.Text);
        //double n2 = Convert.ToDouble(TxtN2.Text);
        //string opchr = TxtOpration.Text;
        //double resultNum = opration(n1, n2, opchr);
        //TxtResult.Text = resultNum.ToString();
        //opration op = new opration();
        opration opr = new opration();
        opr.n1 = Convert.ToDouble(TxtN1.Text);
        opr.n2 = Convert.ToDouble(TxtN2.Text);
        opr = OprationFactory.createOperate(TxtOpration.Text);
        TxtResult.Text = (opr.GetResult()).ToString();
    }
   
}
public class opration
{
private    double _n1=0;
private  double _n2=0;
    public double n1
    {
    get {return _n1 ;}
        set {_n1=value;}
    }
    public  double n2
    {
    get {return _n2;}
        set {_n2=value ;}
    }
    public virtual double GetResult ()
    {
    double result=0;
        return result;
    }
}
   
public class OprationAdd:opration
    {
    public override double  GetResult()
{
    double result=0;
        result=n1+n2;
        return result;
}
}
public class OprationSub:opration
{
public override double  GetResult()
{
    
  double result=0;
        result=n1+n2;
        return result;
}
}
public class OprationFactory
{
    public static opration createOperate(string opchr)
    {
        opration oper =new opration();
        switch (opchr )
        {
            case "+":
                oper=new OprationAdd();
                break;
            case "-":
                oper =new OprationSub();
                break;
        }
              return oper;  
    }
}
在createOperate方法里的n1 n2已经不是Button_Click中的n1 n2了。
承接定制建站、在线系统,代售域名、邮局、主机,价格从优。
有意者站内PM。
新一代四无新人……
为什么?应该如何改??请指点一下。

TOP

opr.n1 = Convert.ToDouble(TxtN1.Text);
opr.n2 = Convert.ToDouble(TxtN2.Text);
放到createOperate方法之后

TOP

还在为头像烦恼?还在为不能关注好友动态烦忧?快来蓝色理想家园吧!
opration opr = new opration();  //11
        opr.n1 = Convert.ToDouble(TxtN1.Text);
        opr.n2 = Convert.ToDouble(TxtN2.Text);
        opr = OprationFactory.createOperate(TxtOpration.Text);  //22
11与22已经不是同一个对象了,所以opr的n1、n2值都为0

TOP

哦明白了,CreateOperate这个返回的是opraton对象。同前面new的那个不是同一个。或者说因为同名把它重新实例化了。

[ 本帖最后由 NIXIANG 于 2008-9-3 20:50 编辑 ]

TOP

谢谢!两位版主。

TOP