C# 处理事件

2024-03-25

我正在尝试建立一个图书馆,并且我正在尝试了解如何按照我想要的方式实现它。 我创建了一个极简示例来向您展示我正在尝试做的事情。

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

尽管我还没有实施when该事件将被调用(当Sold的财产_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在线上_car.OnSell += Car_OnSell;。但是我不确定我是否朝着正确的方向前进。


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

  1. 不要在班级里举办活动。相反,创建一个“Sell”方法来执行类通常会执行的任何操作(例如 setSold == true),但首先检查客户端是否连接了您的_OnSell事件,并首先触发该事件。您可能希望为客户提供某种方式来取消销售_OnSell事件也是如此。
  2. 您还需要让您的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;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 处理事件 的相关文章

随机推荐

  • 如何在设备树源文件中添加注释

    如何在设备树源文件中添加多行或单行注释 我到处都找不到它 使用注释的默认 c 方式是否有效 使用注释的默认 c 方式是否有效 是的 使用 comment ADDENDUM 我还使用过 C 预处理器 if 0 and endif在测试期间快速
  • 如何在使用inputView后显示键盘

    I used inputView以显示uipickerview for my textfield 但我用同样的textfield用于其他功能 使用后如何显示标准键盘inputView为了那个原因textfield textfield inp
  • Android 中的底部按钮栏

    我想知道如何在 android 中创建底部栏按钮 我读到了一些关于这个 U I 的内容 解决办法 有什么控件可以使用吗 您可以在相对布局中执行类似的操作
  • 我正在尝试解决“15 个难题”,但出现“OutOfMemoryError”[已关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 有没有一种方法可以优化此代码以免耗尽
  • 使用分页 extjs 在组合框中搜索

    您好 我正在尝试在组合框中进行搜索 它正在工作 但仅在当前页面中搜索我也使用分页搜索 我需要在所有页面中搜索而不仅仅是当前页面 任何建议 xtype combo fieldLabel Organization Id name company
  • 将 Streaming Flux 的 WebClient Post 拆分为 JSON 数组

    我正在使用第三方 REST 控制器 它接受 JSON 对象数组并返回单个对象响应 当我使用有限的 WebClient 进行 POST 时Flux代码有效 我认为 因为Flux完成 然而 当Flux可能是无限的 我该怎么办 以数组块形式发布
  • 如何在CSS多列布局中将单列居中

    我有一个使用 CSS 多列布局的元素来显示项目列表 div style text align center div Item 1 div div Item 2 div div Item 3 div div Item 4 div div It
  • 在 C# 中从未知长度的流计算哈希值

    C 中计算未知长度流的 动态 md5 之类哈希的最佳解决方案是什么 具体来说 我想根据通过网络接收的数据计算哈希值 我知道当发送者终止连接时我已经完成接收数据 所以我事先不知道长度 编辑 现在我正在使用 md5 并在保存数据并将其写入磁盘后
  • GitHub 页面上的 AngularJS html5mode 支持

    问题是 does GitHub 页面支持AngularJShtml5mode 我找到了一个www资源 https coderwall com p kfomwa angularjs html5mode on github pages其中指出可
  • 线程不活动时释放资源

    我正在使用BackgroundWorker 在其中我使用foreach循环 在其中创建新线程 等待它完成 然后报告进度并继续foreach循环 这就是我要说的 private void DoWork object sender DoWork
  • springfox-swagger2 UI是否支持一次选择多个文件?

    我使用 Spring Boot 和集成的 swagger ui springfox swagger2 我希望能够选择一次上传多个文件 不幸的是 Swagger UI 似乎不允许这样做 至少不允许我的控制器方法 我的控制器方法签名 ApiOp
  • 过滤包含特定字符串的数据[重复]

    这个问题在这里已经有答案了 我希望过滤包含特定字符串的数据 假设这是我的数据集 dst first second 24 Sienna Zoe Dylan 32 Amber John Noah Sienna 72 Daniel Mike Zo
  • React 代码抛出“TypeError:this.props.data.map 不是函数”

    我刚刚开始用 React 编码 我习惯用 CoffeeScript 编码 我尝试沿着React 文档中提供的教程 http facebook github io react docs tutorial html并为状态更新做了类似的事情 然
  • 如何从 Google Places API 获取 20+ 结果?

    我正在开发一个应用程序 在其中我可以获取用户附近的 ATM 列表 为此 我使用 Google Places API 但每次它只返回 20 个结果 我想获得更多结果 在 API 文档中提到它将返回 20 个结果 但我想知道有什么方法可以获得更
  • Html 渲染不正确,并且没有使用 Ajax.ActionLinks 设置 Viewbag.Title

    ViewStart cshtml Layout Request IsAjaxRequest null Views Shared Layout cshtml 布局 cshtml div AjaxOptions options new Ajax
  • Android 3.0 使用物理键盘设置

    背景 我最近购买了一台摩托罗拉 XOOM 平板电脑以及桌面扩展坞和蓝牙键盘配件 扩展坞和键盘工作得很好 但是当我将平板电脑从扩展坞上取下并远离办公桌时 键盘仍然与设备配对 我必须手动更改设置才能使用软键盘 当我将其放回坞站时也是如此 我需要
  • Java JTable 与 JComboBox

    我试图将 JComboBox 放置在 JTable 的特定列中 我有这段代码 并且它正在工作 model new DefaultTableModel JComboBox
  • facet_wrap 条形图上的条形宽度相等

    我有一个如下所示的数据框 category c rep house 2 rep apartment 4 rep condo 3 sample paste ID seq 1 9 sep group c rep 1 9 rep 2 9 valu
  • 如何在 Ruby 中从数组中随机选择元素而不重复?

    我是编码新手 正在尝试学习 Ruby 我在耙子里工作 我应该使用什么来确保随机选择不会连续重复相同的响应 数组 1 2 3 4 5 task array do array 1 2 3 4 5 ap array sample end With
  • C# 处理事件

    我正在尝试建立一个图书馆 并且我正在尝试了解如何按照我想要的方式实现它 我创建了一个极简示例来向您展示我正在尝试做的事情 using System namespace example public class Car public int