C#类比学习
# C#类比学习
要想学习各种语言而不忘记,那必须要抓住不同语言的底层设计思想 通过思想去连接不同的技术从而在自己的大脑里构建出一个技术树来,那最简单的方法就是类比,大道至简,用最熟悉的领域来类比和总结出树的根部,然后长出枝叶,开花结果!
# 类和对象
就像在TypeScript中一样,C#也是一种基于类的面向对象语言。类定义了对象的属性和方法,而对象是类的实例。
# 接口
C#中的接口类似于TypeScript中的接口,它定义了一个对象应该实现的方法和属性。这有助于实现多态性和代码重用。
# 继承
C#中的继承与TypeScript中的继承概念类似,子类可以从父类继承属性和方法。
# 异步编程
在Web开发中,您可能使用了异步/await模式,这在C#中也存在。C#有异步和await关键字,可以更轻松地处理异步操作
# Lambda表达式
C#和TypeScript都支持Lambda表达式,这使代码更加简洁和可读。
# LINQ
C#中的LINQ(Language Integrated Query)类似于JavaScript中的数组方法,如map、filter和reduce。它使您可以使用查询语法来处理集合。
# 事件
C#中的事件类似于TypeScript中的事件,它们允许对象通过发布-订阅模式进行通信。
# 命名空间
命名空间在C#中的作用类似于TypeScript中的模块,用于组织代码和避免命名冲突。
# 集成开发环境(IDE)
就像在Web开发中使用Visual Studio Code一样,在C#中您可以使用Visual Studio,这是一个功能强大的IDE,可以提高您的工作效率。
Dictionary Map List Array
自动更新数据 update方法对应js中的RequestAnimationFrame 本地存储数据: PlayerPrefs 方法对应js中 LocalStorage cookies
Json数据的处理: JsonUtility ----- js中的 JSON
构造函数: Class类的名字的方法 ----- js中的 constructor
C#:
Debug.LogWarning($"{activePanel.name}里找不到名为{name}的子对象");
2
js:
console.warn(`${activePanel.name}里找不到名为${name}的子对象`);
2
# 定时器
js: setTimeout setInterval c#的unity里自带 Invoke InvokeRepeating
# 协程机制
# IEnumerator yield
在引入async/await之前,Unity中实现异步操作需要使用传统的协程方式,即通过IEnumerator和yield关键字来控制执行流程。这种方式虽然功能强大,但代码可读性相对较差,并且需要手动管理状态。从2017.1版本开始,Unity支持了C# 7.0中引入的async/await语法,这极大地简化了异步编程。使用async/await可以像编写同步代码一样编写异步代码,而不需要手动管理状态机。
# 传统协程IEnumerator yield方式
using UnityEngine;
using System.Collections;
public class TraditionalCoroutine : MonoBehaviour
{
void Start()
{
StartCoroutine(WaitAndPrint());
}
private IEnumerator WaitAndPrint()
{
yield return new WaitForSeconds(2f);
Debug.Log("Waited for 2 seconds.");
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# async/await方式
using UnityEngine;
using System.Threading.Tasks;
public class AwaitCoroutine : MonoBehaviour
{
async void Start()
{
try
{
await WaitAndPrint();
}
catch (Exception ex)
{
Debug.LogError($"Error: {ex.Message}");
}
}
async Task WaitAndPrint()
{
await Task.Delay(2000);
Debug.Log("Waited for 2 seconds.");
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# js中的协程方式
在JavaScript中,生成器函数(generator function)是一种特殊的函数,可以使用yield关键字来暂停和恢复函数的执行,从而实现异步编程。生成器函数返回一个生成器对象,可以使用next()方法来恢复执行,并获取yield的值。
# 传统协程IEnumerator yield方式
function* myGenerator() {
yield 'Hello'; // 暂停执行
yield 'World'; // 暂停执行
return 'Done'; // 返回最终值
}
const gen = myGenerator();
console.log(gen.next().value); // 输出 'Hello'
console.log(gen.next().value); // 输出 'World'
console.log(gen.next().value); // 输出 'Done'
2
3
4
5
6
7
8
9
10
11
# async/await方式
async function myGenerator() {
return 'Done'; // 返回最终值
}
const gen =await myGenerator();
2
3
4
5
6
ctrl shift F 游戏相机将重置到场景视角相机的位置