许多游戏开发者被“强迫”。由于Unity而使用C#。但是使用了一段时间后,我会很佩服它:它真的很香。如果有些学生不觉得它很香,则可能是他们没有仔细地将其与其他语言进行比较。 C#与值类型/引用类型很好地兼容,并逐步解决了其他高级语言在开发过程中未能很好解决的问题。纵观主流语言,C语言在语法上基于值类型,使用指针实现引用类型。而Python / Lua等语言则基于引用类型。在性能和细节控制方面,C语言的设计极限更高;但就简单性而言,Python更加统一且易于使用。以前的语言还没有解决这个基本矛盾。 C#是对以前经验的很好总结,在基本语法中区分了值类型和引用类型。对于刚接触编程的学生来说,这很容易造成学习障碍,但是只要您掌握了它,它将为实际工作带来极大的便利。与历史相反,C#也因保守的值类型/引用类型而受到批评。 “取消装箱”和“装箱”一直都是棘手的设计。但是随后我们看到,随着泛型的成熟和普及,以及用泛型容器替换了泛型容器,装箱和拆箱的问题已得到很大程度的解决。还支持异步等等。 C#的设计最初带来了一些问题,但是最后却给出了令人满意的答案。充分利用堆栈空间,非常高效,并且可以执行C ++ / C ++擅长的某些事情。值类型的主要特征是它们可以充分利用堆栈空间。一直批评高级语言的GC功能,但以下常见的Unity代码在运行时没有GC://通过输入三维向量移动对象的位置voidMove(Vector3input){//演示代码,故意分为多行input = input.normalized; Vector3move = input * 2.0f; move * = Time.deltaTime.transform.position + = move;}此代码不会在堆上分配空间,您看到的所有操作是在堆栈上执行的,GC的压力是0。我认为这是C#最令人惊讶的事情。一般来说,数组的长度更长,并且默认情况下它是在堆上分配的。但是C#还提供了一种方便的语法。在堆栈上分配数组是项目后来进行优化的一项神奇技能:publicvoidunsafefoo(){int * bar = stackallocint [10];}是的,C#仍保留指针,但通常仅用于部分不安全的代码。可以在本地热点完全释放性能。良好的语法设计和库函数设计可以指导程序员编写更快,更自然的代码。 C#中最常用的容器列表也有一些不错的设计。当然其他语言也有类似的优点://创建一个长度为0的新列表。但是堆Listlist = newList(100000)中保留了100,000个位置; //添加了很多元素,因为容量是足够,没有GCfor(inti = 0;当保留空间足够时,ilist,添加元素将不会产生GC。并且List与值类型结合使用,在内存使用上也有优势。当然,许多其他语言也有类似的设计。可以说其他语言做的很好,C#也做同样的事情。继承,泛型,接口,类型约束,高级特性等都具有良好且自洽的设计。第一次接触C#时,我研究了int的原型并获得了很多东西:publicstructInt32:IFormattable,IConvertible,IComparable,IComparable,IEquatable {// ....}熟悉C ++的人经过思考,可以理解IComparable,IEquatable同时,他们可以猜出“接口”。考虑一下C#的底层设计,它感觉自然,标准化且恰到好处。简而言之,C#语言及其标准库的设计非常值得参考和赞扬。 C#的良好设计使其成为游戏开发领域的一条光明道路,并且在其他领域也有越来越广泛的应用。基于C语言的Friends可以快速开始使用C#,它适合于单片机的开发。