【问题标题】:Event handler throwing object reference error事件处理程序抛出对象引用错误
【发布时间】:2015-09-01 17:22:31
【问题描述】:

我正在尝试在我的类中创建一个事件并从静态 void main 方法处理它。我的事件是由一个名为 checkAge() 的方法触发的。但是我遇到了这样的错误:

Error1 - 非静态字段需要对象引用, 方法或属性 'Event.Program.m_AgeChecker(int)

我想我做了所有我必须做的事情,我不知道是什么问题。

我的第一堂课代码

class Mahmud
{    
    public Mahmud()
    {
        name = "mahmud";
        age = 25;
    }
    private string name;
    private int age;
    public string Name
    {
        get{return name;}
        set{name=value;}
    }
    public int Age
    {
        get { return age; }
        set { age = value; }
    }
    public void checkAge()
    {           
     AgeUpdate(age);         
    }
    public delegate void AgeEventHandler(int mAge);
    public event AgeEventHandler AgeUpdate;        
}

第二类代码

    static void Main(string[] args)
    {
        Mahmud m = new Mahmud();
        m.AgeUpdate += new Event.Mahmud.AgeEventHandler(m_AgeChecker(m.Age));
        m.Age = 16;
        m.checkAge();
        m.Age = 27;
        m.checkAge();            
    }
    private void m_AgeChecker(int A)
    {
        if (A > 25)
        {
            Console.WriteLine("!");
        }
        else
        {
            Console.WriteLine("ok");
        }
    }        

【问题讨论】:

  • m_AgeChecker 必须是静态的,因为它是从静态方法 (Main) 调用的。
  • @cubrr > 你介意在这里添加一些代码吗?谢谢:)
  • 你只需将m_AgeChecker设为静态...

标签: c# events event-handling


【解决方案1】:

看起来您正在从静态方法调用非静态方法。您需要将方法设为静态。

static void m_AgeChecker(int A)
 {
    if (A > 25)
    {
        Console.WriteLine("!");
    }
    else
    {
        Console.WriteLine("ok");
    }
}   

【讨论】:

  • 我得到了新错误:需要方法名称
  • 创建时只传递方法名:delegate new Event.Mahmud.AgeEventHandler(m_AgeChecker)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-21
  • 1970-01-01
  • 2013-05-25
  • 2019-10-20
  • 2019-01-08
  • 2019-05-04
  • 2018-10-03
相关资源
最近更新 更多