C# 句柄事件



我正在尝试制作一个库,我试图掌握如何以我想要的方式实现它。我创建了一个极简主义的例子来向您展示我想要做什么。

using System;
namespace example
{
    public class Car
    {
        public int Price;
        public string ModelName;
        public Boolean Sold;
        public delegate void SellEventHandler(string str);
        public static event SellEventHandler _OnSell;
        public void OnSell(string str)
        {
            Console.WriteLine("event was fired");
        }
        public Car(int price, string modelname)
        {
            Price = price;
            ModelName = modelname;
            Sold = false;
            _OnSell = OnSell;
        }
    }
    public class Program
    {
        static void Main()
        {
            Car _car = new Car(6000, "audi");
            _car._OnSell += Car_OnSell;
        }
        public void Car_OnSell(string message)
        {
            Console.WriteLine(message);
        }
    }
}

即使我没有实现何时调用事件(当_carSold属性发生变化时应该调用它),我想执行Car类的OnSell(string str)方法(打印"事件被触发"),之后,我想执行Car_OnSell函数(见代码_car.OnSell += Car_OnSell

希望您了解我在这里要做什么。现在我得到的错误是Member 'example.Car._OnSell' cannot be accessed with an instance reference; qualify it with a type name instead_car.OnSell += Car_OnSell;行上。但是,我不确定我是否朝着正确的方向前进。

我想

我明白你在做什么,这就是我会怎么做。

  1. 不要在课堂上挂载活动。相反,创建一个"Sell"方法,该方法执行类通常会执行的操作(如 set Sold == true),但首先检查客户端是否挂接了您的_OnSell事件,然后首先触发它。您可能还希望为客户提供某种方式来取消_OnSell
  2. 活动中的销售。
  3. 您还需要使Car_OnSell成为静态的,因为您是从静态方法(Main)连接它的。这是因为非静态方法需要一个类实例来访问它。

下面是一个示例:

static void Main()
{
    var car = new Car(6000, "audi");
    car._OnSell += Car_OnSell;
    car.Sell(string.Format("Selling the car: {0}", car.ModelName));
}
public static void Car_OnSell(string message)
{
    Console.WriteLine(message);
}
public class Car
{
    public int Price { get; set; }
    public string ModelName { get; set; }
    public Boolean Sold { get; set; }
    public delegate void SellEventHandler(string str);
    public event SellEventHandler _OnSell;
    public void Sell(string str)
    {
        if (_OnSell != null)
        {
            _OnSell(str);
        }
        this.Sold = true;
    }
    public Car(int price, string modelname)
    {
        Price = price;
        ModelName = modelname;
        Sold = false;
    }
}

相关内容

  • 没有找到相关文章

最新更新