博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
正确 C# 未来的期望
阅读量:5145 次
发布时间:2019-06-13

本文共 1925 字,大约阅读时间需要 6 分钟。

接触 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学习文章,假设有什么内容侵犯了你的相关权益,请与官方沟通。我们会即时处理。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

转载于:https://www.cnblogs.com/gcczhongduan/p/4737788.html

你可能感兴趣的文章
用JASS简单修改魔兽争霸地图
查看>>
换站点Logo图片---轻开电子商务系统(企业入门级B2C站点)
查看>>
android学习十四(android的接收短信)
查看>>
正則表達式
查看>>
CF Gym 100187E Two Labyrinths (迷宫问题)
查看>>
【转载】C#使用Except方法求取两个List集合的差集数据
查看>>
IIS-反向代理
查看>>
android手机 ping 虚拟机ubuntu的ip地址
查看>>
HDU 4534 郑厂长系列故事——新闻净化(AC自动机+DP)
查看>>
hibernate的update() 更新延迟或者无法更新,导致同个service调用存储过程执行方法不精确...
查看>>
Tab点击切换-----显示不同的图片内容
查看>>
Python中函数Function知识点
查看>>
linux内核中GNU C __attribute__ 机制的实用
查看>>
操作系统下cache的几个概念
查看>>
windows远程控制ubuntu---基于ssh
查看>>
CSS3透明背景表单
查看>>
python类库32[多线程]
查看>>
创建元素节点createElement
查看>>
【Algorithm】插入排序法
查看>>
【cf contest 1119 G】Get Ready for the Battle
查看>>