你误解 .net 了吗?
我现在发现很多人对C#还存在很大的误解,例如C#是完全封闭的,C#不能跨平台,C#性能很差,C#不支持指针等等,持以上观点的人非常多,甚至最近看到的国内某机构对开发语言的统计中还写着C#不跨平台,不开源,所以想在此普及一下常识。
1.C#是完全开源的,不但开源,而且微软开源的库都是基于MIT许可证的,也就是说,你可以免费使用并修改代码,修改后可以闭源,只需保留作者信息即可,这可以说是最宽松的开源许可
2.C#是完全可以跨平台的,mono现在已经非常成熟,随着去年微软对.net的全面开源,mono已经采用了大量微软官方的源码,完全实现最新的.net framework4.6,功能非常全面。在游戏领域Unity3d,移动开发领域Xamarin,都是基于mono的,都是完全跨平台的,Unity3d更是支持26种操作系统,现在Linux上部署asp.net网站也更加方便,连mono都不需要安装就可以运行。而且跨平台不止mono,还有微软自己的.net core,Unity3d更是开发出了IL2CPP这种逆天的东西,以后C#都可以摒弃虚拟机直接运行在所有平台上了,所以说跨平台是肯定的,而且跨得很好!
3.C#的性能也是非常好的,我专门做过测试,如果对比基础数学运算与C++完全一样,图形方面也能达到C++的70%,看.net库底层代码是大量的指针和原生函数调用,性能自然没问题,关于内存占用,你用了其他虚拟机语言后再来评论C#不迟
4.总有人问C#调用C++dll的各种问题,尤其是类型转换上,我想说,C#是支持指针的,你C++怎么写,C#就怎么写即可,这有什么难的吗?而且很多需要高性能的地方,也可以用指针实现,有些地方用了指针后性能提升能超过1000倍,所以指针的使用也很重要的,但竟然还是有这么多人不知道C#有指针的存在!
5.单独说下Xamarin,现在Xamarin已经完全开源免费,人们开始想尝试使用Xamarin,但总觉得资料少,甚至有人说只能搜到个helloworld的示例,其他都没有,如果开发比较复杂的app就不行了,但我想说,首先Xamarin官网上有大量的资料,非常全面,IO,数据库,网络通信,界面开发等等都有很详尽的教程,nuget上60多万个库,足够你做出一个像样的APP,其次,Xamarin是提供给你直接调用java和OC方法的方式的,使用也非常简便,再次,你真的需要某些特殊的东西,搜索Xamarin找不到相应的解决方案(这里拿android举例),那么好,直接搜android的解决方案即可,由于android的所有API Xamarin都是实现了的(早在4月8日就已经支持Android N了),所以你直接把要用的java代码粘过来即可,类库名称,函数名称,参数类型,各类东西都没变,只有很少的一部分语法,例如属性和foreach等需要稍微改改,就可以直接用java的代码,界面就更不用说了,唯一需要变的就是.xml改为.axml,剩下的都不用改,我真心想知道有什么是不能做的呢?Xamarin只不过给你多增加了一套C#的API,例如你既可以用System.IO.StringBuilder也可以用Java.Lang.StringBuilder,对于开发来说与用java做Android原生开发没有任何区别,所以说Android的资料可以直接拿来用,而Xamarin只是让你多了一种选择而已,在此之上业务逻辑部分iOS与android可以通用,甚至用Xamarin.Form让你的界面也可以跨平台
说了这么多,我只希望人们对C#的认识能够真正的改变,还是那句话,C#现在可以开发除了系统驱动以外的任何程序,在各个领域都有非常成熟的解决方案,并且早已全面开源!
你误解 .net 了吗?的更多相关文章
- 【原】谈谈对Objective-C中代理模式的误解
[原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...
- .NET开源进行时:消除误解、努力前行(本文首发于《程序员》2015第10A期的原始版本)
2014年11月12日,ASP.NET之父.微软云计算与企业级产品工程部执行副总裁Scott Guthrie,在Connect全球开发者在线会议上宣布,微软将开源全部.NET核心运行时,并将.NET ...
- 被误解的MVC和被神化的MVVM(转)
转载自:http://www.infoq.com/cn/articles/rethinking-mvc-mvvm 原文作者:唐巧 被误解的 MVC MVC 的历史 MVC,全称是 Model View ...
- Atitit. 构造ast 语法树的总结attilax oao 1. Ast结构树形12. ast view (自是个160k的jar )22.1. 多条语句ast结构22.2. 变量定义 int b,c; 的ast结构22.3. 方法调用meth1(a=1,b=2,c=3); 的ast结构23. 误解的问题33.1. 语法书子能是个二叉树,实际上多叉树越好..33.2. 非要不个ast放到个s
Atitit. 构造ast 语法树的总结attilax oao 1. Ast结构树形1 2. ast view (自是个160k的jar )2 2.1. 多条语句ast结构2 2.2. 变量定义 in ...
- 关于对CSS尺寸单位'em'的长期误解
一直以来认为'em'是相对于父元素的字体大小. 直到今天学习移动WEB开发,重新复习css的尺寸大小时,惊奇发现:对em深深的误解了!!! 在CSS官网对em的解释实例是: a. h1{line-he ...
- 关于分布式事务的一个误解:使用了TransactionScope就一定会开启分布式事务吗?
背景: 事务是数据库管理系统的一个基本概念,事务具有四个基本特点,即ACID:原子性(Atomicity).一致性(Consistency).隔离性(Isolation)和持久性(Durability ...
- CSS魔法堂:你一定误解过的Normal flow
前言 刚接触CSS时经常听到看到一个词"文档流",那到底什么是"文档流"呢?然后会看到"绝对定位和浮动定位能脱离文档流",从这句可以看到文 ...
- 对Java垃圾回收最大的误解是什么
当 我还是小孩的时候,父母常说如果你不好好学习,就只能去扫大街了.但他们不知道的是,清理垃圾实际上是很棒的一件事.可能这也是即使在Java的世界中, 同样有很多开发者对GC算法产生误解的原因--包括它 ...
- C++对析构函数的误解(转)
C++析构前言 析构函数在什么时候会自动被调用,在什么时候需要手动来调用,真不好意思说偶学过C++…今日特此拨乱反正. C++析构误解正文 对象在构造的时候系统会分配内存资源,对一些数据成员进行初始化 ...
随机推荐
- OOP应用:实体类
实体类 定义:实体类是一个业务实体的类,而业务实体就是整个软件系统业务所涉及的对象. 使用: 1.新增实体类项目,增加类库项目,以.Modes作为后缀. 2.抽取对象以及属性.(简单地说,对象就是每个 ...
- Bootstrap入门(二)栅格
Bootstrap入门(二)栅格 Bootstrap入门(二)栅格 全局CSS样式--栅格 先引入本地的CSS文件(根据自己的文件夹,有不同的引入地址,我是放在一个新建的名为css的文件夹中) con ...
- 继续说一下openjson 以及 json path 的使用 (2)
在openjson 里面,其实是可以把数据类型array里面的值遍历出来的,举个栗子 ) = N' {"name":"test", "obj" ...
- SQL Server调优系列基础篇(索引运算总结)
前言 上几篇文章我们介绍了如何查看查询计划.常用运算符的介绍.并行运算的方式,有兴趣的可以点击查看. 本篇将分析在SQL Server中,如何利用先有索引项进行查询性能优化,通过了解这些索引项的应用方 ...
- Javascript字数统计
字数统计功能,原理是给textarea添加onKeyup事件,事件读取textarea内容并获得长度,并赋值给统计字数的那个文本节点,这里有一点要注意的是添加onKeypress和onKeydown事 ...
- Fitbit Flex 智能手环佩戴心得 主要说说过敏
参杂一篇杂文. 也是因为体重飙升,所以去年下半年的时候入手了一个Fitbit flex. 当时相比Jawbone up,nfc和ble的特性,以及防水性还是更吸引我一点.所以就入手了. 佩带了如此长的 ...
- JavaScript中的函数表达式
在JavaScript中,函数是个非常重要的对象,函数通常有三种表现形式:函数声明,函数表达式和函数构造器创建的函数. 本文中主要看看函数表达式及其相关的知识点. 函数表达式 首先,看看函数表达式的表 ...
- css3中变形与动画(二)
css3制作动画的几个属性:变形(transform),过渡(transition)和动画(animation). transform介绍过了.接下来介绍过渡transition. 一.例子 先通过一 ...
- 谈谈Lucene和Solr索引存目录
在Lucene中,有几种索引存放模式呢?用过的人可能记得SimpleFSDirectory.MMapDirectory.NIOFSDirectory.RAMDirectory这四种.新版本的通过FSD ...
- MMORPG大型游戏设计与开发(part1 of net)
网络模块的设计,是大型多人在线游戏中比较重要的一部分.我之所以将网络模块放到最前面,是因为许许多多的开发者面对这一块的时候充满了疑惑,而且也觉得很神秘和深奥.这些我们面对到的困难,其实是由于我们对这方 ...