注:本文大部分借鉴了《果壳中的C#5.0权威指南》,小编也想根据这本书好好梳理一下C#。


序言:C#是一种通用的类型安全且面向对象的编程语言。这种语言的目标是提高程序员的生产力,为此,需要在简单性、可表达性和性能之间实现平衡。c#语言的首席架构师从第一个版本开始就是Anders Hejlsberg(Turbo Pascal的发明者和Delphi架构师)。C#语言与平台无关,但是他能够很好的与Microsoft.NET Framework协同工作。

1.1 面向对象

C#实现了面向对象编程的广泛特性,包括了(封装、继承、多态)。封装表示在对象周围创建一个边界,将他的外部(公开)行为与内部(私有)实现细节隔离。

 C#在面向对象方面的特性包括:


1、统一的类型系统

C#中的基础构建块是一种被称为类型的数据与函数的封装单元。C#有一个统一的类型系统,其中所有的类型最终共享一个公共的基类。这意味着所有的类型,不管他们是表示业务对象,还是数字等的基本类型,都共享相同的基本功能集。例如:任何类型都可以通过调用他的ToString方法转换为一个字符串。


2、类与接口

在纯粹的面向对象泛型中,唯一的类型就是类。但是C#中还有其他几种类型,其中一种就是接口(类似Java中的接口)。接口与类相似,但是他只有某种类型的定义,而不是实现它。在需要使用多继承时,他是非常有用的(与C++和Eiffel等语言不同,C#不支持类得多继承(单根性))。


3、属性、方法和事件

在纯粹的面对象泛型中,所有的函数都是方法(smalltalk中就是这样)。在C#中方法只是一种函数成员,也包含一些属性和事件以及其他组成部分。属性是封装了一部分对象状态的函数成员,如按钮的颜色和标签的文本。事件是简化了对象状态变化处理的函数成员。


1.2 类型安全性

    C#首先是一种类型安全的语言,这意味着类型的只有通过他们的定义的协议进行交互,从而保证每一个类型内部一致性。例如:C#不允许将字符串类型作为整型处理。

更具体的说,C#支持静态类型化,这意味着这种语言会在编译时执行静态类型安全性检查的。另外一种是动态类型安全性,.NET CLR(CLR常用简写词语,CLR是公共语言运行库(Common Language Runtime)和Java虚拟机一样也是一个运行时环境,它负责资源管理(内存分配和垃圾收集等),并保证应用和底层操作系统之间必要的分离。CLR存在两种不同的翻译名称:公共语言运行库和公共语言运行时。)在运行时执行动态安全性检查。

静态类型化能够在程序之前除去大量的错误。他将大量的运行单元测试转移到编译器中,验证程序中所以类型之间都是相互适合的。这样大型程序就更容易管理、更具可预测性和健壮性。而且,静态类型化是一些诸如:Visual Studio和IntelliSence等工具有助于编写程序,因为他知道某个特定变量的类型是什么,因此也知道能够调用哪些方法来处理这个变量。

注:C#允许部分代码通过新的dynamic关键字来动态制定类型。然而,C#在大多数情况下是一种静态类型化的语言。

C#之所以被称为强类型语言,是因为他的类型规则(以静态或动态的方法执行)是非常严格的。例如:不能够使用一个浮点型参数来调用一个定义是接受的整数函数,除非显示的将这个浮点型数转换为整数。这又助于编码错误。

强类型也是C#代码能够在沙箱运行的原因之一。沙箱的安全性的所用所有方面都由主机控制的一种环境。在沙箱中,一定注意不能随意忽略一个对象的类型规则从而破坏其状态。


1.3 平台支持

    C#一般用来编写运行在Windows平台的的代码。虽然Microsoft通过ECMA(ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协会,英文名称是European Computer Manufacturers Association)通过ECMA-262标准化的脚本程序设计语言。这种语言在万维网上应用广泛,它往往被称为JavaScriptJScript,但实际上后两者是ECMA-262标准的实现和扩展。)实现了C#语言和CLR的标准化,但是专门用来支持非Windows平台C#资源(包括Microsoft的内部或者外部)总量相对较少。这意味着,如果很注重多平台支持,那么诸如Java等语言可能是更明智的选择。因此,C#可以在以下情况用于编写跨平台代码:

1.   C#代码运行在服务器上,生成可运行在任意平台的DHTML。这正是ASP.NET采用的方法。

2.   C#代码运行在一个非Microsoft Common Language Runtime 的运行环境中。最典型的就是Mono项目,它具有自己的C#编译器和运行时环境,可运行在Linux、Solaris、Mac OS X和Windows上。

3.   C#代码运行在一台支持Microsoft Silverlight(支持Windows和MAC OS X)的主机上。这是一种与Adobe Flash Player类似的新技术。


1.4 内存管理

    C#依靠运行时环境来执行自动的内存管理。CLR有一个垃圾回收器,他是作为程序一部分运行的,负责回收不在被引用的对象所占用的内存。这让程序员不需要显示的释放对象分配的内存,从而避免了诸如C++等语言中 错误使用指针造成的内存问题。C#并没有去除指针:他只是使大多数编程任务不在需要指针。对于性能至关重要的热点和互操作性方面,还是可以使用指针,但是之允许在显示标记为不安全的代码块使用

    


1.5 C#与CLR的关系

c#依赖于一个运行环境,它包括许多特性,如自动管理内存和异常处理。C#的设计与CLR的设计非常接近,CLR提供了这些运行时特性(但c#技术不依赖于CLR)。而且C#的类型系统与CLR的类型系统非常接近(例如:都共享相同的基础类型的定义)。


1.6 CLR和.NET Framework

    .NET Framework 由名为Common Language Runtime(CLR)的运行时环境和大量程序库组成的。这些程序库由核心库和应用库组成,应用库依赖于核心库。下面就是这些程序库的可视化概况:

CLR是执行托管代码的运行环境。C#是几种将源代码编译为托管代码语言之一。托管代码会被打包成程序集,他可以是.exe或者.dll(程序库)的形式,包括了类型信息和元数据。

托管代码用Intermediate Language 或者IL表示。当CLR加载一个程序集时,他将会将IL转换为该主机的原生代码,如X86.这个转换是通过CLR的JT(JUST-IN-TIME)编译器完成的。程序集几乎保留了所有的源语言的解构,这使得他很容易被检测,也很容易动态的生成代码。

提示:Red Gate 的.NET Reflector是个重要分析程序集内容的工具(你可以将他看作为反编译器使用)。

   CLR是无数运行时的主机。这些服务包括了内存管理、程序加载和安全服务。CLR是与语言无关的。他允许开发人员使用多种语言(例如:C#、Visual Basic、.NET、Managed C++、Delp.NET、Chrome .NET和J#)开发应用程序。.NET Framework 只支持基础所有Windows平台或Web的应用程序的程序库组成。

1.7 C#与Windows Runtime

    C#5.0还实现了Windows runtime(WinRT)库的互操作。WinRT是一个可扩展接口和运行环境,他可以用面向对象和语言无关的方式访问库。win8带有这个运行库,属于Microsoft组件对象模型或COM的扩展版本。(最低win8)

1.8 C#5.0新特性

    C#5.0两个较大的新特性是通过两个关键字(async和await)支持异步功能。异步功能支持使用异步延续,从而可以简化快速响应和线程安全客户端应用程序编写。他们还有利于编写高度并发和高效I/O密集型应用程序,不需要为每一个操作绑定一个线程资源。

C#和.NET Framework简介的更多相关文章

  1. Android Framework 简介

    Android Framework 简介 简介 之前的研究太偏向应用层功能实现了,很多原理不了解没有详记,结果被很多公司技术人员鄙视了,为了减少自己的短板,重新复习了一遍C++.java.Androi ...

  2. Rest Framework简介 和 RESTful API 设计指南

    使用Django Rest Framework之前我们要先知道,它是什么,能干什么用? Django Rest Framework 是一个强大且灵活的工具包,用以构建Web API 为什么要使用Res ...

  3. 【Robot Framework】---- Robot Framework简介、特点、RIDE

    Robot Framework简介.特点.RIDE 一.简介.特点. Robot Framework是一款python编写的功能自动化测试框架.具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型 ...

  4. Django Rest Framework 简介及 初步使用

    使用Django Rest Framework之前我们要先知道,它是什么,能干什么用? Django Rest Framework 是一个强大且灵活的工具包,用以构建Web API 为什么要使用Res ...

  5. 05.DRF-Django REST framework 简介

    一.明确REST接口开发的核心任务 分析一下上节的案例,可以发现,在开发REST API接口时,视图中做的最主要有三件事: 将请求的数据(如JSON格式)转换为模型类对象 操作数据库 将模型类对象转换 ...

  6. 第一篇:Entity Framework 简介

    先从ORM说起吧,很多年前,由于.NET的开源组件不像现在这样发达,更别说一个开源的ORM框架,出于项目需要,以及当时OOP兴起(总不至于,在项目里面全是SQL语句),就自己开始写ORM框架.要开发O ...

  7. Spring Framework简介

    作者关于此主题早期文章 Spring框架快速入门 起源 要谈Spring的历史,就要先谈J2EE.J2EE应用程序的广泛实现是在1999年和2000年开始的,它的出现带来了诸如事务管理之类的核心中间层 ...

  8. Entity Framework简介

    前言 很久很久之前就想来好好的学习一下EF,一直也是各种理由导致一直也没有好好的开始,现在下定决心了,不管怎样一定要把这先走一遍,并且把自己学到的相关EF的知识进行记录,以备后用,也望广大博友们一起来 ...

  9. Robot Framework简介

    概述 Robot Framework是一个通用的关键字驱动自动化测试框架.测试用例以HTML,纯文本或TSV(制表符分隔的一系列值)文件存储. 通过测试库中实现的关键字驱动被测软件.Robot Fra ...

  10. SharePoint Framework 简介

    作者:陈希章 发表于 2017年12月25日 前言 通过前面几篇文章,我相信大家对于SharePoint Online的开发有了更加全面的认识,上一篇 介绍的SharePoint Add-in的开发, ...

随机推荐

  1. C#面向对象(一):明确几个简单的概念作为开胃菜

    绝对干货,总结了下C#面向对象的干货内容以及我几年来的使用心得,分享出来 先明确几个简单概念作为开胃菜: 1.命名空间 namespace BackStageManagement.Services 关 ...

  2. 2017/2/22怎么判断mongodb服务已经启动了?

    打开任务管理器,看看服务下面是否有个MongoDB,有就表示成功

  3. 微信小程序 写音乐播放器 slider组件 将value设置为0 真机测试滑块不能回到起点

    最近在用微信小程序写一个音频播放页面,做时间进度的时候用到了slider插件,但是在自然播放完成,或者上/下切换的时候,将slider的value属性值设为0,开发工具上滑块会回到起点,有效.但是真机 ...

  4. QT QString与char *之间的转换 【转载】

    原文网址:http://blog.csdn.net/candyliuxj/article/details/6429208 1.QString转char * 先将QString转换为QByteArray ...

  5. 14.Selenium+Python使用火狐浏览器问题解决

    一开始使用的是IE浏览器作为自动化浏览器,但是由于想学习无头模式,故选择FireFox作为浏览器,以下是遇到的相关问题: 1.简单代码 from selenium import webdriver d ...

  6. 第六篇 VIM你值得拥有!

    vim 是一个具有很多命令的功能非常强大的编辑器.限于篇幅,在本教程当中      就不详细介绍了.本教程的设计目标是讲述一些必要的基本命令,而掌握好这      些命令,您就能够很容易将vim当作一 ...

  7. MySQL 利用xtrabackup进行增量备份详细过程汇总 (转)

    Xtrabackup下载.安装以及全量备份请参考:http://blog.itpub.net/26230597/viewspace-1465772/ 1,创建mysql备份用户 mysql -uroo ...

  8. fastjson --JSONObject 和JSONArray 转换

    fastjson解析:resultValue=[    {        "total": 1,        "saleLists": [           ...

  9. java代码String创建对象数组,进行排序

    总结:String是一个类.对于字串大小比较用方法:compareTo() package com.da.ima2; public class gh { public static void main ...

  10. Excel开发学习笔记:发布VSTO下的Excel开发项目

    遇到一个数据处理自动化的问题,于是打算开发一个基于excel的小工具.在业余时间一边自学一边实践,抽空把一些知识写下来以备今后参考,因为走的是盲人摸象的野路子,幼稚与错误请多包涵. 开发环境基于VST ...