为什么这段代码会产生'非静态字段、方法或属性需要对象引用'编译错误

本文关键字:方法 字段 属性 错误 编译 对象引用 静态 代码 为什么 段代码 | 更新日期: 2023-09-27 18:12:20

我不知道哪里出错了。

我有一个名为email的类和一个名为EmailEvent的例程,它是从另一个页面调用的。下面是方法声明:

public void EmailEvent(
                       string evtDate, 
                       string evtName, 
                       string evtContact, 
                       string evtBody, 
                       string lnkMinutes, 
                       string lnkTReports, 
                       String[] textTo)

你会看到,我传入了一个数组。在调用例程的页面上,我有以下代码:

ArrayList mailIDs = new ArrayList();
        switch (ddlSelection.SelectedValue.ToString())
        {
            case "One":
                mailIDs.Add(ddlallMembers.SelectedValue.ToString());
                break;
            case "Members":
                mailIDs.Add(ddlSelection.SelectedValue.ToString());
                break;
            case "Prospects":
                mailIDs.Add(ddlSelection.SelectedValue.ToString());
                break;
            case "All":
                mailIDs.Add(ddlSelection.SelectedValue.ToString());
                break;
            case "List":
                for (int mems = 0; mems < lbChosen.Items.Count; mems++)
                {
                    mailIDs.Add(lbChosen.Items[mems].Value);
                }
                break;
            default:
                Response.Write("<script>alert('Invalid Selection.  Try again.')</script>");
                break;
        }
        String[] myArr = (String[]) mailIDs.ToArray( typeof( string ) );
        Emails.EmailEvent(
                          tbEventDt.Text, 
                          tbEvent.Text, 
                          tbContact.Text, 
                          tbEventText.Text, 
                          hlMinutes.Target.ToString(), 
                          hlTReport.Target.ToString(), 
                          myArr);

所以我传递了我所有的参数,似乎是正确的,但最后一行被标记为错误,如下所示:

错误5非静态字段需要对象引用,方法,或属性"email"。EmailEvent(字符串,字符串,字符串,字符串,字符串,字符串,字符串[])'

我已经尝试了很多参数的变化(传递数组,传递一切除了数组与适当的变化到过程)。总是同样的错误。

我做错了什么?这是我第一次尝试传递一个数组(可以是一个值,也可以是一打)

为什么这段代码会产生'非静态字段、方法或属性需要对象引用'编译错误

问题是您已经将EmailEvent定义为实例方法:

public void EmailEvent( ... )

你把它当作一个static方法来调用:

Emails.EmailEvent( ... );

您的意思是创建或获取类Emails的实例,然后在该实例上调用EmailEvent:

Emails myEmails = new Emails();
myEmails.EmailEvent( ... );

您有两个选择。如果您希望每个类的实例都引发事件,那么您需要在引发事件之前声明一个类的实例。

如果你想在整个应用程序域中从类中引发单个事件,你需要将事件声明更改为"public static void EmailEvent"