错误学习如何使用自定义事件

时间:2013-09-06 13:57:26

标签: c# events

我正在学习如何在c#中使用自定义事件,但是我遇到了一些错误 我得到“粗体字

中的非静态字段,方法或属性需要对象引用”

所以我尝试了this

但无法尝试案例1因为TypeChanged已经是非静态方法(我认为) 在案例2中,我“无法将BicycleType作为实例引用访问,将其限定为类型”

public class Bicycle
 {
     public event EventHandler TypeChanged; 
     private string type;
     ...
public string BicycleType {
         get { return this.type; }
         set { 
             this.type = value; 
         if (this.TypeChanged != null) 
             this.TypeChanged( this, new EventArgs() ); 
         }
     }

 public Bicycle() {}

 class Program
{ 
    static void Main(string[] args)
    {
        Console.WriteLine("heila!");
        Bicycle istanza = new Bicycle();

        istanza.TypeChanged += new EventHandler(**istanza_TypeChanged**);

        istanza.BicycleType = "io";
        Console.WriteLine("io");

    }

    void istanza_TypeChanged(object sender, EventArgs e) {
        Console.WriteLine("rofkd");
    }
 }

我跟随的教程告诉我,我可以使用事件“as”方法,也许我在这里错了? 代码与te教程代码完全相似

抱歉我的英语不好,并提前致谢

4 个答案:

答案 0 :(得分:2)

当你从main方法注册事件时,它是静态的,事件处理程序(istanza_TypeChanged)也必须是静态的。

答案 1 :(得分:0)

您的问题是Main是静态的,因此无法访问类Program的非静态成员。但是,您尝试访问istanza_TypeChanged。这就是造成你的例外的原因。

您必须使istanza_TypeChanged静态以解决问题

class Program
{ 
    static void Main(string[] args)
    {
        Console.WriteLine("heila!");
        Bicycle istanza = new Bicycle();

        istanza.TypeChanged += new EventHandler(**istanza_TypeChanged**);

        istanza.BicycleType = "io";
        Console.WriteLine("io");

    }

    static void istanza_TypeChanged(object sender, EventArgs e) 
    {
        Console.WriteLine("rofkd");
    }
}

答案 2 :(得分:0)

istanza_TypeChanged更改为以下内容:

        private static void istanza_TypeChanged(object sender, EventArgs e)
        {
            Console.WriteLine("rofkd");
        }

以下为我解雇了这个事件:

public class Bicycle
{
    public event EventHandler TypeChanged;
    private string type;

    public string BicycleType
    {
        get { return this.type; }
        set
        {
            this.type = value;
            if (this.TypeChanged != null)
                this.TypeChanged(this, new EventArgs());
        }
    }

    public Bicycle()
    {
    }

    private class Program
    {
        private static void Main(string[] args)
        {
            Console.WriteLine("heila!");
            Bicycle istanza = new Bicycle();

            istanza.TypeChanged += istanza_TypeChanged;

            istanza.BicycleType = "io";
            Console.WriteLine("io");

        }

        private static void istanza_TypeChanged(object sender, EventArgs e)
        {
            Console.WriteLine("rofkd");
        }
    }
}

答案 3 :(得分:0)

从非静态上下文注册事件或将事件更改为静态。