我正在尝试制作一个库,我试图掌握如何以我想要的方式实现它。我创建了一个极简主义的例子来向您展示我想要做什么。
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);
}
}
}
即使我没有实现何时调用事件(当_car
的Sold
属性发生变化时应该调用它),我想执行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;
行上。但是,我不确定我是否朝着正确的方向前进。
我明白你在做什么,这就是我会怎么做。
- 不要在课堂上挂载活动。相反,创建一个"Sell"方法,该方法执行类通常会执行的操作(如 set
Sold == true
),但首先检查客户端是否挂接了您的_OnSell
事件,然后首先触发它。您可能还希望为客户提供某种方式来取消_OnSell
活动中的销售。 - 您还需要使
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;
}
}