正确 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能得出正确结果.多次测试,输入不同值,均得出正确结果,证明稳定性. ③实验分析: ...
随机推荐
- C++基础学习教程(七)----类编写及类的两个特性解析--->多态&继承
类引入 到眼下为止我们所写的自己定义类型都是keywordstruct,从如今起我们将採用class方式定义类,这样的方式对于学习过其它高级语言包含脚本(Such as Python)的人来说再熟悉只 ...
- windows2003 IIS6下安装ISAPI_Rewrite3破解版
摘抄的https://jingyan.baidu.com/article/ff42efa931a2c0c19e220298.html 非常感谢,我是怕百度经验有一天消失了,以防万一 iis6 ISAP ...
- Vim 在 windows 下的应用
常用命令的学习. 第一部分 Esc:返回到 正常模式 h j k l:左下上右 x:删除字符(normal mode) :q!:放弃所有更改并退出vim :wq:保存所有更改并退出vim i:进入编辑 ...
- Wampserver 2.5 多网站配置方法
写在开头:本文适用于wampserver2.5版本号,和wamp的老版本号配置有语法上的差别,笔者正是由于被老版本号的配置办法给整迷糊了所以才总结了一篇针对2.5版本号的配置方法,假设您还停留在1.x ...
- [Vue] Build Vue.js Apps with the Vue-CLI and Nuxt.js
The vue-cli allows you to easily start up Vue projects from the command line while Nuxt.js enables a ...
- iOS开发Quartz2D之八:图形上下文状态栈
#import "DrawView.h" @implementation DrawView - (void)drawRect:(CGRect)rect { // Drawing c ...
- Android CursorAdapter的使用详解
一.CursorAdapter介绍 CursorAdapter这个类是继承于BaseAdapter的它是一个虚类它为Cursor和ListView连接提供了桥梁 二.CursorAdapter详解 1 ...
- Android Gradle Plugin指南(三)——依赖关系、android库和多项目配置
原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Dependencies-Android-Librari ...
- 关于android 怎样安装 assets文件下的apk
在自己的app中安装assets文件夹下的apk文件 public class MainActivity extends Activity { Context mContext; @Override ...
- 强大的 function adapters
void printElem(int elem, const char* prefix){ cout << prefix << elem << endl; } fo ...