正确 C# 未来的期望
接触 C# 一年。整体上是一个很完好的语言,可是某些细节特征还是不够完美。这里记下我如今对它将来的一些期望。
更强大的泛型约束
与 C++ 的模板相似,C# 的泛型使得编写适用于多种类型的代码更加简洁。假设没有泛型。我们可能须要使用 object 并运行类型转换,或者针对每一种类型写大量雷同的代码。在泛型类型约束上。C# 一如既往的严格。可是因为泛型约束还不完好,有时不得不写一些反复的代码。比方以下这个样例:
public static T MaxT(T a, T b) where T is int or long or float or double
{
return a = b ? a : b;
}
可惜如今的 C# 还没有这个功能......System.Math 的做法就是为各种类型分别写一个 Max 方法。
关于C#的泛型约束參考这里:类型參数的约束,模板与泛型的差别:C++ 模板和 C# 泛型之间的差别。
命名空间范围的訪问修饰
C# 提供了 internal 訪问修饰符来保护程序集内部类型或成员。可是实际开发中我们常常也须要在一个程序集中划分子模块。
为了更清楚的把同一个子模块内部的类之间公开的内容与不同的子模块之间公开的内容差别开,希望未来
C# 能够提供命名空间范围的訪问修饰。
比方以下这个样例:
namespace Moudle
{
public class Common { ... }
private class Secret { ... }
}
加入 private 类型的訪问修饰,这样 Common能够訪问 Secret,Secret 类型在 Moudle命名空间可见,对 Moudle 之外是不可见的。注意,如今的 C# 不同意命名空间内的元素声明为 private 或 protected。
C++ 中的友元也能够解决问题,可是我猜你们都不喜欢
friend。。。
使用内部类能够一定程度上解决问题。可是太不自由了。
在 Unity 开发中这个问题更严重,由于脚本组件必须写在单独的文件、且不能够为内部类。
可定义变量的引用
C# 支持在方法參数上使用 ref 和 out keyword来引用实參,这对结构类型非常重要,否则你非常难通过方法来改动结构本身的值。可是可能是为了避免 C# 太过复杂,所以这个特性仅限于方法參数。这样我们常常遇到看起来非常不正常的问题。比方 foreach 遍历结构类型集合无法改动值,用下标遍历结构数组仅仅能使用数组名+。为了避免太复杂,能够限制仅能够定义一级引用。
foreach(ref Vector3 position in positions)
{
position.x = 0;
}
更自由的扩展方法
如今的扩展方法必须写在单独的静态类里。并且必须使用了命名空间才干够使用。
这就是一个没有意义的限制。我们按功能模块来划分代码,发现某一个方法使用扩展的形式来编写更优雅,于是不得不把这种方法拿出去,放到某个名字没有意义的静态类里。这太无聊了。另外。扩展方法不支持以属性的形式扩展、不支持以引用的形式扩展,都是须要改进的。
class MyClass
{
public static DoSomething(this OtherClass obj, ...) { ... }
public static getSetSomething(this OtherClass obj){ get {...} set{...} }
public static void ModifyValue(this ref ValueType value) { ... }
}
更简洁的命名空间使用规则
看这个样例:
using A.B;
class MyClass { A.B.C.OtherClass x; }
在不使用不论什么命名空间时,须要如上面那样写一长串代码;using A 的情况下,你还是得写这么一串。假设命名空间层次太多时,你要么using到类所在的命名空间,要么从头写起前缀。
这太不智能了。
希望能够正确的识别子命名空间。
using A.B;
class MyClass { C.OtherClass x; }
声明:此篇文档时来自于【狗刨学习网】社区-unity极致学院,是网友自行公布的Unity3D学习文章,假设有什么内容侵犯了你的相关权益,请与官方沟通。我们会即时处理。
版权声明:本文博客原创文章,博客,未经同意,不得转载。
正确 C# 未来的期望的更多相关文章
- 对 C# 未来的期望
接触 C# 一年,总体上是一个非常完善的语言,但是某些细节特征还是不够完美.这里记下我现在对它将来的一些期望. 更强大的泛型约束 与 C++ 的模板相似,C# 的泛型使得编写适用于多种 ...
- [spoj Favorite Dice ][期望dp]
(1)https://vjudge.net/problem/SPOJ-FAVDICE 题意:有一个n面的骰子,每一面朝上的概率相同,求所有面都朝上过至少一次的总次数期望. 题解:令dp[i]表示 i ...
- 俞敏洪:未来教育是互联网+ AI +区块链联合颠覆
“我对面向未来教育领域,内心是有一丝悲哀的.至少在我思考和理解的范围内,互联网和 AI 是不是有可能彻底的改变中国教育现状?我没有想清楚.”10 月 31 日,在鲸媒体举办的以“教育 +AI”为的主题 ...
- loj6171/bzoj4899 记忆的轮廊(期望dp+优化)
题目: https://loj.ac/problem/6171 分析: 设dp[i][j]表示从第i个点出发(正确节点),还可以有j个存档点(在i点使用一个存档机会),走到终点n的期望步数 那么 a[ ...
- lecture1-NN的简介
这是DL的发明人Hinton在多伦多大学的2013年冬季教授de课程,并将视频分享到coursera网站上.其中不但有视频,也有课件,但是Hinton主页上还有他上课的课后问题,Hinton告诉学生这 ...
- 工作流学习——重要概念扫盲篇一步曲 (zhuan)
http://blog.csdn.net/zwk626542417/article/details/46592471 ***************************************** ...
- 企业架构研究总结(32)——TOGAF架构内容框架之架构交付物
3. 架构交付物(Architecture Deliverables) 架构交付物是在整个架构开发方法循环过程中所产生或被使用的契约性且正规化的企业架构内容,因而其与企业架构开发方法有着紧密的联系.本 ...
- TOGAF架构内容框架之架构交付物
TOGAF架构内容框架之架构交付物 3. 架构交付物(Architecture Deliverables) 架构交付物是在整个架构开发方法循环过程中所产生或被使用的契约性且正规化的企业架构内容,因而其 ...
- C语言程序设计第一次作业(2017.10.10完成)
一:程序框图以及正确运行结果: (1)给出圆半径,得出圆面积: ①程序框图如下: ②测试图如下: 经过测试 ,输入半径2能得出正确结果.多次测试,输入不同值,均得出正确结果,证明稳定性. ③实验分析: ...
随机推荐
- 【u249】新斯诺克
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 斯诺克又称英式台球,是一种流行的台球运动.在球桌上,台面四角以及两长边中心位置各有一个球洞,使用的球分 ...
- [TypeStyle] Generate static css + html files using TypeStyle
You can easily use TypeStyle to build static html files with encapsulated CSS. You can use this patt ...
- thinkphp3.2.3 excel导出,下载文件,包含图片
关于导出后出错的问题 https://segmentfault.com/q/1010000005330214 https://blog.csdn.net/ohmygirl/article/detail ...
- ZOJ 2514 Generate Passwords 水
啦啦啦,水一发准备去复习功课~ ------------------------------------------水一发的分割线----------------------------------- ...
- SpringBoot 使用 @Value 从 YAML文件读取属性(转)
在 YAML中有如下配置 paypal: mode:live 在类中,通过 @Value属性读取 @Value("${paypal.mode}") private String m ...
- PatentTips - Highly-available OSPF routing protocol
BACKGROUND OF THE INVENTION FIG. 1A is a simplified block diagram schematically representing a typic ...
- 终端中经常使用的shell 命令
Mac 在shell命令终端中,Ctrl+n相当于方向向下的方向键,Ctrl+p相当于方向向上的方向键. 在命令终端中通过它们或者方向键能够实现对历史命令的高速查找.这也是高速输入命令的技巧. 在命令 ...
- static,const,extern,以及全局常量
1:全局常量的定义:1:创建Header头文件,再创建与Header头文件类名相同的空文件作为.m文件,.h文件引用文件,.m文件负责定义常量 #import <UIKit/UIKit.h> ...
- [GraphQL] Use GraphQLList with GraphQLObject Types
When working with collections of things in GraphQL, we'll always reach out for the GraphQLListType. ...
- 使用DOT语言和Graphviz绘图(翻译)
Casa Taloyum About Me Blog Archives 使用DOT语言和Graphviz绘图(翻译) Date Wed 26 November 2014 Tags graphviz / ...