我正在尝试制作某种类型的库,我正在努力掌握如何以我想要的方式实现它。 我创建了一个简约的例子来向您展示我想要做的事情。
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);
}
}
}
即使我没有实现时,也会调用该事件(应该在Sold
的{{1}}属性发生变化时调用),我想执行_car
类的OnSell(string str)
方法(打印“事件被触发”)之后,我想执行Car
函数(参见代码Car_OnSell
)
希望你明白我在这里想做什么。现在,我得到的错误是_car.OnSell += Car_OnSell
行Member 'example.Car._OnSell' cannot be accessed with an instance reference; qualify it with a type name instead
。但是我不确定我是否正朝着正确的方向前进。
答案 0 :(得分:1)
我想我明白你在做什么,这就是我要做的。
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;
}
}