Unity

关于Unity支持C#6以及.Net4.6之后 之 罗列篇

Unity2017在前不久正式发布了,在以前的Unity版本中,C#只能使用.Net Framework3.5的内容,虽然对于绝大多数的开发来说已经没有什么问题了,但是还是对于一些特殊领域还是会又非常巨大的限制。

例如:泛型不支持逆变与协变,导致在不同的泛型类型中不容易做到类型转换,之前我在制作有限状态机的时候就遇到了这个棘手的问题,最后只能用强制类型转换来解决。还有一点是异步编程的增强,C#5中提供了async和await关键字,比起以往过于底层的Thread来说已经是非常大的进步了。接下来就罗列一些将C#升级到C#6之后我们能做的一些事情。

我会省略一些COM相关或者Unity上不太可能用得到的东西,但是如果有可能用到的话我还是会写一下的。

而且由于很多语法都只是语法糖而已,所以在C#3.5也已经可以用了,但是在CLR升级之后的特性在以前的Unity中绝不可能使用的。

C# 4 新增的内容:

最重要的更新其实是DLR,但是相对而言,泛型的逆变和协变会更加实用一些。以及语法糖和实用小特性若干

1、泛型的逆变以及协变(很不错!)

2、动态类型(要加额外的dll,PC端应该可以用。拥有鸭子类型的能力!就像Groovy一样(虽然Groovy是后出的),运行时入口绑定)

3、动态与DLR动态语言运行时(PC端应该可以用,IronPython、IronRuby,其实都是基于CLR的,但是支持动态绑定)

4、带索引的属性(3.5以前可用)

4、COM互操作(不太用的到)

5、弱引用(做框架的时候很多时候会用到)

6、Lazy<T>延迟加载(基本现在新出的语言都会自带这个特性)

7、内存映射文件

C# 5 新增的内容:

妈妈再也不用担心我的异步编程,还有一如既往的一堆语法糖

1、带参数的泛型构造函数(泛型的进一步强化)

2、支持计算的可空类型(虽然原本的可空类型也没怎么用)//后来发现正式版没有

3、case支持表达式(不错的新特性)

4、扩展属性(扩展方法已经非常方便,这个肯定也非常实用了)//其实后来发现正式版并没有这个功能

5、异步操作,支持新的异步关键字以及Task类(终极重要)

6、绑定运算符“:=:”(不太用得到吧,做WPF用的)

7、调用方信息(做工具的时候说不定会用到,平时用得会比较少)

8、变量捕捉中的陷阱修复——循环(虽然已经知道这个陷阱了,但是修掉挺好的,少费点心思在细节上)

C# 6 新增的内容:

这个版本就全是语法糖了……

1、字符串插值(类似于Groovy的GString,字符串中可以带有表达式,不知道两者比起来哪个更牛逼一些)

2、空操作符(语法上的一小步,函数式编程的一大步!)

3、NameOf,获取变量或属性的名称(小功能)

4、在Catch和Finally中使用await

5、表达式方法体(精简语法,没啥用其实)

6、自动属性初始化器(终于不用到处找地方初始化了!)

7、只读自动属性(虽然是小功能,但是也是经常要用的)

8、异常过滤器(针对不同情况下捕捉同一个异常,还行)

9、Index初始化器(无法是另外一种初始化Dictionary的方式,没感觉什么厉害的)

10、using静态类的方法可以使用static using(这里是借鉴了Java的语法,在java当中可以通过静态导入方法的方式来另类地实现函数式编程,虽然语法该冗余的还是冗余,java不行!)

大概就罗列到这里了!回家一个个尝试!话说今天下了个JetBrain的Rider。天生就自带Unity插件!

啧啧啧,VS也要加油啊!(然而VS是无敌的)

尝试的过程我也会写一篇文章!

————————————后续更新———————————

实际操作的时候发现在C#5中的扩展属性在正式版当中被取消了,本来还挺期待这个特性的,不过用扩展方法也能做就是了。

C#5中的可空类型计算也不行,返回的都是null。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注