標籤:

如果重新設計C#你最希望增加什麼特性,去掉什麼特性,改變什麼語法?

從2000年6月份到現在(2017/04/05),C#已經演進了將近17年了,一個語言的歷史越悠久,其兼容性問題就越突出,從C#1.0到現在,語言設計上一定針對兼容性做過不少的妥協,如果現在重新設計C#的話,你最希望去掉什麼特性,新增什麼特性,修改什麼特新。


去掉IEnumerable、IEnumerator、ArrayList等所有有泛型版本的老容器,還有讓Task可以寫成Task&,去掉delegate留下Func(同理Action&<...&>也可以寫成Func&),加上variadic template argument而不是讓Func有65536個重載,etc,這些事情其實是同一個問題,數都數不清。把這些搞定了,就可以開始考慮一下讓IComparable不是一個interface而是一個concept了。不做成type class也沒關係,反正C#裡面又沒有偏特化,使用concept重載的能力不重要。

我寧願犧牲C# 5.0以後的所有東西,也想讓這個事情先出現。


1、本地不可變變數。

2、不可空類。

3、傳遞函數不需要顯式寫委託。(我的意思是,函數參數不應該顯式指定用哪個委託)

4、類默認為Sealed。

5、高階函數。


邀請我的,是要我回答 inductive 和 Pi 么。


在集合為空的時候自動new一個啊!

Comments = Comments ?? new List&();
Comments.Add(comment);

好彆扭啊。或者新增一個方法:AddEvenNull()?


只有我希望C#把那些繼承自C/C++的那些int, char, float, double什麼的都去掉,然後統一到Integer, Decimal和String三個類型里嗎……

C#裡面有太多在設計之初為了「向C++/Java語法兼容」而遺留下的,現在看起來似乎已經沒什麼必要的東西了。


被輪子哥屏蔽了好傷心……

輪子哥的回答里說到的新Action的語法我都想好了,就這樣:

public delegate TResult Func&(TList args);

public delegate void Action&(TList args) : Func&;說


這種問題有意義?都是根據自己的習慣來腦補,真設計起來就吔屎了。


去掉 begin end模式,使用 asy

可以直接編譯輸出Native執行文件。。

讓Framework的Size小點,小點,小點

去掉 stream ,使用buffer概念。


像對待string一樣對待StringBuilder可以嗎


去掉函數必須寫類里

增加

宏(lisp那種,不是c那種)

模板

改變現有的介面為協議

增加一個定義數據交換的介面

--------分割線--------

以下只是單純寫起來省力點

元組展開

數組推導式

解構賦值


推薦閱讀:

Unity3d&Cocos2dx進階書籍推薦?
new和malloc內部的實現方式有什麼區別?
如何高效的學習Nginx源碼,汲取養分?
為什麼說goto是一種不好的用法?
如何用 C 語言畫一個「聖誕樹」?

TAG:編程 | C# |