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方法中初始化变量,但这取决于您自己。要记住的重要一点是,作用域可以看到它们自己的成员,以及它们所嵌套的所有作用域。因此,方法可以看到类范围变量,但不能看到彼此的。

将每个事件中的代码移动到单独的方法,并从测试单元调用它们,传递相同的对象?