1

我正在学习如何在 C# 中使用自定义事件,但我遇到了一些错误,我得到“非静态字段、方法或属性需要对象引用”的粗体字

所以我试着按照这个

但是案例 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”方法,也许我在这里错了?代码与教程代码完全相似

对不起我的英语不好,提前感谢

4

4 回答 4

2

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

于 2013-09-06T14:01:29.217 回答
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");
    }
}
于 2013-09-06T14:03:08.250 回答
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");
        }
    }
}
于 2013-09-06T14:05:09.140 回答
0

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

于 2013-09-06T14:06:22.127 回答