您当前的位置: 首页 >  c#

Peter_Gao_

暂无认证

  • 0浏览

    0关注

    621博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C# 有什么惊艳到你的地方?

Peter_Gao_ 发布时间:2021-09-14 08:28:58 ,浏览量:0

 很多游戏开发者都是由于Unity而“被迫”使用C#的。但用过一段时间,就会由衷赞叹:真香。

如果有些同学没感觉到很香,有可能是没有仔细和其它语言比较 :)

1、C#良好兼容了值类型/引用类型,在发展中逐步解决了其他高级语言没解决好的问题

纵观主流语言,C语言在语法上是以值类型为基础,借助指针实现引用类型;而Python/Lua等语言,是以引用类型为基础。

论性能和细节控制力,C语言的设计上限更高;但是论简易程度,Python更为统一、易用。这一基本矛盾在之前的语言里都没有解决好。

而C#很好的总结了前人的经验,在基础语法上就区分了值类型和引用类型。对初次接触编程的同学来说这一点容易造成学习障碍,但是只要掌握了它,就会给实际工作带来极大便利。

反观历史,C#也曾经因为 值类型/引用类型 保守诟病,“拆箱”和“装箱”一直是个招黑的设计。但后来我们看到,随着泛型的成熟和普及,随着泛型容器代替通用容器,装箱和拆箱的问题已经在很大程度上解决了。

还有对异步的支持等等,C#的设计最初带来了一些问题,但是最终还是交上了一份满意的答卷。

2、充分利用栈空间,非常高效,做了一部分C/C++擅长的事

值类型有一大特点,就是能充分利用栈空间。高级语言的GC特性一直饱受诟病,但下面的Unity常见代码,运行时没有GC:

// 通过输入的三维向量,移动物体的位置
void Move(Vector3 input)
{
    // 演示代码,有意分成很多行
    input = input.normalized;
    Vector3 move = input * 2.0f;
    move *= Time.deltaTime.
    transform.position += move; 
}

这段代码没有在堆上分配空间,你所看到的操作全都是在栈上进行的,GC压力为0。我认为这是C#最令人惊艳的一点。

一般来说数组长度较长,默认分配在堆上。但是C#也提供了便利的语法,在栈上分配数组,对项目后期优化来说简直是神技:

public void unsafe foo()
{
    int* bar = stackalloc int [10];
}

没错,C#依然保留了指针,但一般仅用于局部的unsafe代码。在局部热点可以完全解放性能。

3、良好的语法设计和库函数设计,引导程序员写出更快且更自然的代码

C#中最常用的容器List,也具有一些良好的设计(当然其它语言也有类似的优点)

        // 新建一个list,长度为0。但在堆中预留10万个位置
        List list = new List(100000);
        // 加入很多元素,由于容量足够没有GC
        for (int i=0; i            
关注
打赏
1664521772
查看更多评论
0.0402s