目前,我有基本的C++和PHP技能.但是,我想切换到C#和ASP(对于Web部分).为什么?你会问.因为我有机会很容易地学习C#(包括OOP-ed)到一个非常高级的水平.因为我读到ASP与C#非常相似,我正在考虑学习它.
那么,有很多东西在C#中无法完成?什么样的东西?ASP的相同问题.
C#的限制(以及通过关联,.NET):
不是一个系统级语言 - 通常不适合编写驱动程序等.(已经说过,有些像Cosmos这样有趣的项目.)
对Windows以外平台的有限支持.Mono做得很好,但它仍然与.NET本身不相称(比如在多个平台上同时发布的Java).
只有作为非托管语言运行的选项才是第三方语言 - ngen将"预先JIT"你的代码,但它仍然在.NET框架下运行.实际上C#被设计为在VM中运行,具有垃圾收集功能.
有些人不喜欢缺乏确定性破坏,这意味着C++ RAII技术不起作用.(相反,您依赖GC进行内存管理和IDisposable
非内存资源的接口.该using
语句使这更容易,但它不是一个完美的解决方案.)
这种语言有点像微软的心血来潮.如果MS决定放弃它,我认为它不会再进一步发展,很快就会失去对新开发的支持.话虽如此,我不希望MS很快放弃它.
在C#4发布之前,它对后期绑定没有太多支持.你可以用反射来做,但这有点痛苦.即使使用C#4,它仍然是一种基本的静态语言,但它具有动态工作的方式,它真正有用.
目前对不变性的支持不多.特别是,C#3引入了一些新功能(自动属性,集合初始化器,对象初始化器),这使得更容易编写可变类型 - 但是对于不可变类型没有相应的功能.C#4中的命名参数和可选参数应该在这方面有所帮助,但欢迎提供更多支持.C#3使得以函数式编写代码变得更容易,但这确实需要不变性.
对于桌面应用程序开发,您基本上可以在WinForms和WPF(Windows Presentation Foundation)之间进行选择.后者是更新,设计得更好的IMO,但在这两种情况下,您可能会看到托管应用程序和编写良好的Win32应用程序之间的"快速"略有不同.在启动时尤其如此,而框架正在加载并且许多UI代码正在被JIT等等.我个人认为这不是一个障碍,但......