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

本文关键字:出错 事件 自定义 何使用 学习 | 更新日期: 2023-09-27 18:30:35

我正在学习如何在 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"方法,也许我在这里错了?代码与 TE 教程代码完全相似

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

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

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

你的问题是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");
    }
}

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

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");
        }
    }
}