C# 在多个函数之间使用对象
我正在创建一个垃圾邮件检查器。一种方法扫描电子邮件,另一种方法向要检查的单词和短语数组添加已知标志;这两种方法都是C# 在多个函数之间使用对象,c#,winforms,object,spam-prevention,C#,Winforms,Object,Spam Prevention,我正在创建一个垃圾邮件检查器。一种方法扫描电子邮件,另一种方法向要检查的单词和短语数组添加已知标志;这两种方法都是Tester类的一部分。目前,每个方法都有一个按钮,但是每个事件都会创建自己的垃圾邮件对象。如何让两个事件使用同一个对象,允许扫描识别我刚才添加的标志 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing;
Tester
类的一部分。目前,每个方法都有一个按钮,但是每个事件都会创建自己的垃圾邮件对象。如何让两个事件使用同一个对象,允许扫描识别我刚才添加的标志
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace HW8_DR
{
public partial class Spam_Scanner : Form
{
public Spam_Scanner()
{
InitializeComponent();
}
private void testButton_Click(object sender, EventArgs e)
{
Tester scan = new Tester();
scan.tester(Convert.ToString(emailBox.Text));
this.SpamRatingBox.Text = string.Format("{0:N1}%", Tester.countSpam / Tester.wordCount * 100);
this.WordsBox.Text = Tester.posSpam;
this.OutputPanal.Visible = true;
this.pictureBox1.Visible = false;
}
private void addButton_Click(object sender, EventArgs e)
{
Tester scan = new Tester();
scan.addSpam(Convert.ToString(addFlagBox.Text));
this.addFlagBox.Text = "";
}
}
}
将
Tester
变量移动到class字段,如下所示:
public partial class Spam_Scanner : Form
{
Tester scan;
public Spam_Scanner()
{
InitializeComponent();
scan = new Tester();
}
private void testButton_Click(object sender, EventArgs e)
{
scan.tester(Convert.ToString(emailBox.Text));
this.SpamRatingBox.Text = string.Format("{0:N1}%", Tester.countSpam / Tester.wordCount * 100);
this.WordsBox.Text = Tester.posSpam;
this.OutputPanal.Visible = true;
this.pictureBox1.Visible = false;
}
private void addButton_Click(object sender, EventArgs e)
{
scan.addSpam(Convert.ToString(addFlagBox.Text));
this.addFlagBox.Text = "";
}
}
方法内部声明的变量(和您的一样)具有方法作用域,因此其他方法无法看到它们
相反,在类作用域中声明变量,以便类的两个方法都可以看到它
public partial class Spam_Scanner : Form
{
private Tester scan;
private void testButton_Click(object sender, EventArgs e)
{
scan = new Tester();
...
}
private void addButton_Click(object sender, EventArgs e)
{
scan.addSpam(Convert.ToString(addFlagBox.Text));
...
}
}
根据按钮单击的顺序,您可能希望在声明中而不是在testButton\u Click方法中初始化变量,但这取决于您自己。要记住的重要一点是,作用域可以看到它们自己的成员,以及它们所嵌套的所有作用域。因此,方法可以看到类范围变量,但不能看到彼此的。将每个事件中的代码移动到单独的方法,并从测试单元调用它们,传递相同的对象?