接触 C# 一年,总体上是一个非常完善的语言,但是某些细节特征还是不够完美。这里记下我现在对它将来的一些期望。

 
 
 
更强大的泛型约束
 
与 C++ 的模板相似,C# 的泛型使得编写适用于多种类型的代码更加简洁。如果没有泛型,我们可能需要使用 object 并执行类型转换,或者针对每一种类型写大量雷同的代码。在泛型类型约束上,C# 一如既往的严格,但是由于泛型约束还不完善,有时不得不写一些重复的代码。比如下面这个例子:
 
    public static T Max<T>(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# 未来的期望的更多相关文章

  1. 正确 C# 未来的期望

    接触 C# 一年.整体上是一个很完好的语言,可是某些细节特征还是不够完美.这里记下我如今对它将来的一些期望. 更强大的泛型约束 与 C++ 的模板相似,C# 的泛型使得编写适用于多种类型的代码更加简洁 ...

  2. lecture1-NN的简介

    这是DL的发明人Hinton在多伦多大学的2013年冬季教授de课程,并将视频分享到coursera网站上.其中不但有视频,也有课件,但是Hinton主页上还有他上课的课后问题,Hinton告诉学生这 ...

  3. Hadoop! | 大数据百科 | 数据观 | 中国大数据产业观察_大数据门户

        你正在使用过时的浏览器,Amaze UI 暂不支持. 请 升级浏览器 以获得更好的体验! 深度好文丨读完此文,就知道Hadoop了! 来源:BiThink 时间:2016-04-12 15:1 ...

  4. Delphi 2010初体验,是时候抛弃Delphi 7了

    Delphi 2010已于近日由Embarcadero公司发布.作者Kim Madsen作为一名资深的Delphi开发者,在他的博客中谈到了Delphi 2010的新性能.它的使用感受以及对Delph ...

  5. Delphi 2010

    Delphi 2010已早由Embarcadero公司发布.作者Kim Madsen作为一名资深的Delphi开发者,在他的博客中谈到了Delphi 2010的新性能.它的使用感受以及对Delphi语 ...

  6. SaaS系列介绍之八: SaaS的运营模式

    1 引言 软件的核心是它为用户解决领域相关问题的能力.               ________Eric Evans,<领域驱动设计> 传统的软件生命周期中,软件的维护占整个过程的70 ...

  7. 微软 Microsoft

    微软(Microsoft Corporation) (NASDAQ:MSFT,港交所:4338),是一家基于美国的跨国电脑科技公司,是世界PC(Personal Computer,个人计算机)机软件开 ...

  8. 企业架构研究总结(32)——TOGAF架构内容框架之架构交付物

    3. 架构交付物(Architecture Deliverables) 架构交付物是在整个架构开发方法循环过程中所产生或被使用的契约性且正规化的企业架构内容,因而其与企业架构开发方法有着紧密的联系.本 ...

  9. TOGAF架构内容框架之架构交付物

    TOGAF架构内容框架之架构交付物 3. 架构交付物(Architecture Deliverables) 架构交付物是在整个架构开发方法循环过程中所产生或被使用的契约性且正规化的企业架构内容,因而其 ...

随机推荐

  1. -bash: sdk: command not found

    Mac上安装过sdkman 但是由于某种原因使环境变量丢失久会出现使用sdk命令时 出现-bash: sdk: command not found提示 从新按照教程安装又提示电脑上sdkman已经安装 ...

  2. 六、django rest_framework源码之解析器剖析

    1 绪论 网络传输数据只能传输字符串格式的,如果是列表.字典等数据类型,需要转换之后才能使用但是我们之前的rest_framework例子都没有转换就直接可以使用了,这是因为rest_framewor ...

  3. Java 集合之 Map

    Map 就是另一个顶级接口了,总感觉 Map 是 Collection 的子接口呢.Map 主要用于表示那些含有映射关系的数据,存储的是一组一组的键值对.Map 是允许你将某些对象与其它一些对象关联起 ...

  4. iOS 11开发教程(十)iOS11无线连接手机真机测试

    iOS 11开发教程(十)iOS11无线连接手机真机测试 在Xcode 9.0中,已经可以通过无线连接手机进行真机测试了.具体的操作步骤如下: (1)首先需要使用数据线将手机连接到苹果电脑上. (2) ...

  5. 机器学习之路: python 支持向量机 LinearSVC 手写字体识别

    使用python3 学习sklearn中支持向量机api的使用 可以来到我的git下载源代码:https://github.com/linyi0604/MachineLearning # 导入手写字体 ...

  6. luoguP4571 [JSOI2009]瓶子和燃料 裴蜀定理

    裴蜀定理的扩展 最后返回的一定是\(k\)个数的\(gcd\) 因此对于每个数暴力分解因子统计即可 #include <map> #include <cstdio> #incl ...

  7. C++11中的raw string literals

    作为一名C++书看得少得可怜的新手,我一直没有勇气去系统地学习一下C++ 11添加的新特性.不过,平日里逛论坛,阅读大犇们的博客,倒是了解了一些.比如,这个帖子: 如何绕过g++ 4.8.1那个不能在 ...

  8. [IOI2007]Miners

    [IOI2007]Miners 题目大意: 两个人吃东西,总共有\(3\)种食物,每个人每次吃到食物时可以获得的收益是当前食物和前两次吃的食物中,不同食物的种数.现在给定一个长度为\(n(n\le10 ...

  9. Windows Server 2008 R2下将JBoss安装成windows系统服务

    JBoss版本是jboss-4.2.3.GA-jdk6.zip,操作系统是Windows Server 2008 R2. 1.系统已安装好java环境,JAVA_HOME已配置好: 2.下载所需文件. ...

  10. bzoj 1176: [Balkan2007]Mokia&&2683: 简单题 -- cdq分治

    2683: 简单题 Time Limit: 50 Sec  Memory Limit: 128 MB Description 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要 ...