接触 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. CSUOJ 1781 阶乘除法

    Description 输入两个正整数 n, m,输出 n!/m!,其中阶乘定义为 n!= 1*2*3*...*n (n>=1). 比如,若 n=6, m=3,则 n!/m!=6!/3!=720 ...

  2. collection 和 collections

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha collection 是集合的意思. 集合 是 集合类的上级接口, 比如 set 和 l ...

  3. 快速排序之C++实现

    快速排序之C++实现 一趟快速排序的算法是: 1)设置两个变量i.j,排序开始的时候:i=0,j=N-1: 2)以第一个数组元素作为关键数据,赋值给key,即key=A[0]: 3)从j开始向前搜索, ...

  4. luoguP4555 [国家集训队]最长双回文串 manacher算法

    不算很难的一道题吧.... 很容易想到枚举断点,之后需要处理出以$i$为开头的最长回文串的长度和以$i$为结尾的最长回文串的长度 分别记为$L[i]$和$R[i]$ 由于求$R[i]$相当于把$L[i ...

  5. luoguP4696 [CEOI2011]Matching KMP+树状数组

    可以非常轻易的将题意转化为有多少子串满足排名相同 注意到$KMP$算法只会在当前字符串的某尾添加和删除字符 因此,如果添加和删除后面的字符对于前面的字符没有影响时,我们可以用$KMP$来模糊匹配 对于 ...

  6. [Luogu4724][模板]三维凸包(增量构造法)

    1.向量点积同二维,x1y1+x2y2+x3y3.向量叉积是行列式形式,(y1z2-z1y2,z1x2-x1z2,x1y2-y1x2). 2.增量构造法: 1)首先定义,一个平面由三个点唯一确定.一个 ...

  7. Educational Codeforces Round 45 (Div 2) (A~G)

    目录 Codeforces 990 A.Commentary Boxes B.Micro-World C.Bracket Sequences Concatenation Problem D.Graph ...

  8. ROS知识(11)----同步两台机器时钟

    两台机器同时运行过程中,对于ROS的tf变换,其要求两台机器的时钟要保持一致. 1.查询时间 首先通过以下命令,看两台机器时钟是否有差异.在本机上,查看远程master的机器时间: ntpdate - ...

  9. 通过yum来安装vsftpd

    Linux系统:centos6.6.  安装步骤  1.通过yum来安装vsftpd [root@localhost ~]# yum -y install vsftpd 2.设置为开机启动 [root ...

  10. [转载] 使用Kettle进行数据迁移(ETL)

    由于开发新的系统,需要将之前一个老的C/S应用的数据按照新的数据设计导入到新库中.此过程可能涉及到表结构不一致.大数据量(千万级,甚至上亿)等情况,包括异构数据的抽取.清洗等等工作.部分复杂的工作需要 ...