老实说......我不知道我做错了什么......我得到了错误
你调用的对象是空的
代码如下所示,我使用了标记错误/////.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace MonuEventPlanning
{
public partial class Form1 : Form
{
DinnerFun dinnerFun;
public Form1()
{
InitializeComponent();
DinnerFun dinnerFun = new DinnerFun { PeepQty = (int)nudPeepQty.Value };
}
public void btnCalc_Click(object sender, EventArgs e)
{
dinnerFun.CalcDrinks(cbxHealthy.Checked); ///////PROBLEM HERE////////////////
dinnerFun.CalcDecorations(cbxFancy.Checked);
DisplayCost();
}
public void DisplayCost()
{
tbxDisplayCost.Text = dinnerFun.CalcTotalCost(cbxHealthy.Checked).ToString("c");
}
}
Run Code Online (Sandbox Code Playgroud)
}
这是我正在做的这个练习项目的另一页代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace MonuEventPlanning
{
public partial class Form1 : Form
{
DinnerFun dinnerFun;
public Form1()
{
InitializeComponent();
DinnerFun dinnerFun = new DinnerFun { PeepQty = (int)nudPeepQty.Value }; //This object is instantiated again? Or is this the same dinnerFun from above?
}
public void btnCalc_Click(object sender, EventArgs e)
{
dinnerFun.CalcDrinks(cbxHealthy.Checked);
dinnerFun.CalcDecorations(cbxFancy.Checked);
DisplayCost();
}
public void DisplayCost()
{
tbxDisplayCost.Text = dinnerFun.CalcTotalCost(cbxHealthy.Checked).ToString("c");
}
}
}
Run Code Online (Sandbox Code Playgroud)
一些帮助将不胜感激.
Ant*_*ram 11
问题是这个
namespace MonuEventPlanning
{
public partial class Form1 : Form
{
DinnerFun dinnerFun; // class level field declared here
public Form1()
{
InitializeComponent();
DinnerFun dinnerFun = new DinnerFun { PeepQty = (int)nudPeepQty.Value };
// ^^^ local declaration, is NOT member field
}
public void btnCalc_Click(object sender, EventArgs e)
{
dinnerFun.CalcDrinks(cbxHealthy.Checked); // this is the member field, never instantiated
Run Code Online (Sandbox Code Playgroud)
您已在类级别声明了一个变量,但是没有实例化它,您在构造函数中声明并初始化一个具有相同名称的局部变量.修复它很简单,只需从构造函数中删除声明,只需实例化它即可.
public Form1()
{
InitializeComponent();
dinnerFun = new DinnerFun { PeepQty = (int)nudPeepQty.Value };
// ^^^ instantiates class field
}
Run Code Online (Sandbox Code Playgroud)
这暴露了C#的一个特性.允许局部变量和参数与类的成员字段具有相同的名称.遇到这种情况时,可以通过this修饰符引用类字段.
class Foo
{
string bar;
int baz;
public Foo(string bar)
{
this.bar = bar;
// ---^ class field
// ---------^ parameter
int baz = 42; // local
this.baz = baz; // assigns local value to class field
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
194 次 |
| 最近记录: |