浩明-空间 浩明-空间
首页
  • Unity

    • 类比法学c#
  • 学习笔记

    • 《JavaScript高级程序设计》
    • 《TypeScript 从零实现 axios》
    • TypeScript
    • JS设计模式总结
  • typescript杂谈

    • 为什么要用ts
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • vim学习
  • webgl基础
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 悟道
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

储浩明

热爱编程的小明
首页
  • Unity

    • 类比法学c#
  • 学习笔记

    • 《JavaScript高级程序设计》
    • 《TypeScript 从零实现 axios》
    • TypeScript
    • JS设计模式总结
  • typescript杂谈

    • 为什么要用ts
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • vim学习
  • webgl基础
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 悟道
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • JavaScript文章

  • Unity

    • C#类比学习
    • ts-c#的泛型
    • c#命名空间与es6模块
    • lambda表达式
    • c#和ts的异步编程
    • C#与ts的数组操作方法
    • c#与ts事件
      • TypeScript 事件示例
      • C# 事件示例
      • 相似之处
      • 不同之处
    • c#和ts的继承
    • c#与ts接口
    • c#与ts类对象
  • 学习笔记

  • typescript杂谈

  • 前端
  • Unity
chuhaoming
2024-08-06
目录

c#与ts事件

# TypeScript 事件示例

在 TypeScript 中,我们通常使用观察者模式来实现事件机制。下面是一个简单的示例:

// 定义事件类型
interface Observer {
  update: (data: any) => void;
}

// 定义主题类
class Subject {
  private observers: Observer[] = [];

  addObserver(observer: Observer) {
    this.observers.push(observer);
  }

  removeObserver(observer: Observer) {
    this.observers = this.observers.filter(o => o !== observer);
  }

  notify(data: any) {
    this.observers.forEach(observer => observer.update(data));
  }
}

// 创建主题实例
const subject = new Subject();

// 定义观察者
const observer1 = {
  update: (data: any) => console.log(`Observer 1 received: ${data}`)
};

const observer2 = {
  update: (data: any) => console.log(`Observer 2 received: ${data}`)
};

// 添加观察者
subject.addObserver(observer1);
subject.addObserver(observer2);

// 触发事件
subject.notify('Hello, world!');
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

在这个示例中,我们定义了一个 Subject 类作为事件源,它维护了一个观察者列表。观察者需要实现 Observer 接口中的 update 方法。当事件被触发时,Subject 会遍历观察者列表并调用它们的 update 方法。

# C# 事件示例

在 C# 中,事件是一种语言级别的构造,用于实现发布者-订阅者模式。下面是一个简单的示例:

using System;

// 定义事件处理器委托
public delegate void EventHandler(object sender, EventArgs args);

// 定义事件源类
public class EventSource
{
    // 定义事件
    public event EventHandler MyEvent;

    // 触发事件
    public void RaiseEvent()
    {
        if (MyEvent != null)
        {
            MyEvent(this, EventArgs.Empty);
        }
    }
}

// 定义事件处理程序
public class EventHandler1
{
    public void HandleEvent(object sender, EventArgs args)
    {
        Console.WriteLine("Event handler 1 received the event.");
    }
}

public class EventHandler2
{
    public void HandleEvent(object sender, EventArgs args)
    {
        Console.WriteLine("Event handler 2 received the event.");
    }
}

class Program
{
    static void Main(string[] args)
    {
        EventSource source = new EventSource();
        EventHandler1 handler1 = new EventHandler1();
        EventHandler2 handler2 = new EventHandler2();

        // 订阅事件
        source.MyEvent += handler1.HandleEvent;
        source.MyEvent += handler2.HandleEvent;

        // 触发事件
        source.RaiseEvent();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54

在这个示例中,我们定义了一个 EventSource 类,它包含一个名为 MyEvent 的事件。事件处理程序是一个与 EventHandler 委托类型相兼容的方法。我们创建了两个事件处理程序类 EventHandler1 和 EventHandler2。在 Main 方法中,我们创建了 EventSource 实例和事件处理程序实例,然后使用 += 运算符订阅事件。当调用 RaiseEvent 方法时,所有订阅的事件处理程序都会被调用。

# 相似之处

  • 两种语言中的事件都遵循观察者模式,允许多个订阅者监听同一个事件源。
  • 它们都提供了机制来订阅和取消订阅事件。
  • 当事件被触发时,所有订阅的处理程序都会被调用。

# 不同之处

  • TypeScript 中的事件通常是基于类的实现,而 C# 中的事件是一种语言级别的构造。
  • C# 中的事件使用委托作为事件处理程序的类型,而 TypeScript 中可以使用任何函数类型。
  • C# 中的事件具有更强的类型安全性,编译器会检查事件处理程序的签名是否与委托类型匹配。
  • C# 中的事件可以被标记为虚拟、抽象或覆盖,支持更好的继承和多态性。
  • TypeScript 中的事件实现通常更加灵活和动态,而 C# 中的事件实现更加严格和静态。
编辑 (opens new window)
#C#
上次更新: 2024/08/09, 10:55:31
C#与ts的数组操作方法
c#和ts的继承

← C#与ts的数组操作方法 c#和ts的继承→

最近更新
01
c#与ts类对象
08-06
02
c#与ts接口
08-06
03
c#和ts的继承
08-06
更多文章>
Theme by Vdoing | Copyright © 2019-2024 Haoming chu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式