接触 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. http远程调用原生get、post模板

    一.get方法 package lq.httpclient.method; import java.io.BufferedReader; import java.io.IOException; imp ...

  2. 【基础知识】JavaScript基础

    [学习日记]JavaScript基础 1,一般写在<head></head>中(其实可以放到任意位置); 2,弹出对话框 <scripttype="text/j ...

  3. Android四大组件-服务

    Android服务 android 的服务有点类似windows的服务,没有界面,在后台长时间运行,如果我们这种需求的话我们就可以使用服务来实现. 服务的典型应用场景: 播放音乐,下载等,如果要在一个 ...

  4. PHP的钩子实现解析

    钩子是编程里一个常见的概念,非常的重要.它使得系统变得非常容易拓展(而不用理解其内部的实现机理,这样可以减少很多工作量).只要有一个钩子样本,能很容易仿照第一个钩子快速的编写第二个钩子,这里对钩子进行 ...

  5. 模型构建<2>:不平衡样本集的处理

    分类预测建模都有一个基本的假设,即样本集中不同类别的样本个数基本相同,但是在实际任务中,经常会出现各类样本个数差别较大的情况,这样的样本集就是不平衡样本集,它对学习建模的性能会带来很大的影响,因此必须 ...

  6. UVALive 6257 Chemist's vows

    #include<iostream> #include<string.h> #include<stdio.h> #include<ctype.h> #i ...

  7. spring---transaction(2)---源代码分析(事务的定义TransactionDefinition)

    写在前面 事务属性通过TransactionDefinition接口实现定义,主要有事务隔离级别.事务传播行为.事务超时时间.事务是否只读. public interface TransactionD ...

  8. weblogic安装使用: Could not Create the Java Virtual Machine

    第一次使用weblogic,完全不明白是怎么一回事!找安装包花了大把时间!找到了不知道怎么安装 -- _ --||| 找了一篇安装文档<weblogic 安装部署手册.doc>, 位于:[ ...

  9. MySQL多表联查之ThinkPHP中的实现

    创建两个表如图: sp_user表: sp_dept表: 目的:通过sp_user的dept_id查询所属部门即sp_dept中的name. 原生sq方法一:select t1.*,t2.name a ...

  10. HK设备安全补丁升级方案

    1.背景:          当前很多HK行业设备的端口映射到公网上,其中一部分老版本设备是存在安全漏洞的,由于传统行业没有设备平台的概念,无法通过设备提示用户进行升级,导致这些存在漏洞的设备在互联网 ...