我正在学习关于C#类中事件的实现。
我有一个示例案例:
有一个 Sport 和 City 类都继承自 Car 类。Car 类有一个基础方法 OnBuy,被 Sport 和 City 类继承。在 OnBuy 方法内,事件处理程序已被分配到 Buy 事件上。
还有一个名为 LicenseService 的服务或类,每次购买时都会生成许可证号码。
我在这种情况下实现了事件驱动编程。
这是我的 git 示例:
https://github.com/adityosnrost/CSharpLearningEvent
问题:
这是使用 C# 中事件的正确方式吗?
如果这是正确的,我可以将 OnBuy 方法覆盖到每个子类中吗?如果覆盖可用,我该怎么做?
如何从此示例中使其更好?
谢谢
class Program
{
static void Main(string[] args)
{
Car car = new Car();
Sport sport = new Sport();
City city = new City();
//car.Name();
//sport.Name();
//city.Name();
//Console.ReadLine();
LicenseService ls = new LicenseService();
city.Buy += ls.GenerateLicense;
city.OnBuy();
Console.ReadLine();
}
}
internal class Car
{
internal virtual void Name()
{
Console.WriteLine("Car");
}
internal event EventHandler Buy;
internal virtual void OnBuy()
{
EventHandler handler = Buy;
if (null != handler)
{
handler(this, EventArgs.Empty);
}
}
}
internal class Sport: Car
{
internal override void Name()
{
Console.WriteLine("Sport");
}
}
internal class City: Car
{
internal override void Name()
{
Console.WriteLine("City");
}
}
internal class LicenseService
{
internal void GenerateLicense(object sender, EventArgs args)
{
Random rnd = new Random();
string carType = sender.GetType().ToString();
string licenseNumber = "";
for(int i = 0; i < 5; i++)
{
licenseNumber += rnd.Next(0, 9).ToString();
}
Console.WriteLine("{1} Car has been bought, this is the license number: {0}", licenseNumber, carType);
}
}