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

1.1 面向对象

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

统一的类型系统

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

类与接口

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

属性、方法与事件

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

1.2 类型安全性

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

更具体地说,C#支持静态类型化,这意味着这种语言会在编译时执行静态类型安全性检查。另外一种是动态类型安全性,.NET CLR在运行时执行动态类型安全性检查。

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

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

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

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

1.3 内存管理

C#依靠运行时环境来执行自动的内存管理。CLR有一个垃圾回收器,它是作为程序一部分运行的,负责回收不再被引用的对象所占用的内存。这让程序员不需要显式地释放为对象分配的内存,从而避免了C++等语言中错误使用指针造成的内存问题。

C#并没有去除指针:它只是使大多数编程任务不需要使用指针。对于性能至关重要的热点和互操作性方面,还是可以使用指针,但是只允许在现实标记为不安全的代码块中使用。

1.4 平台支持

C#一般用来编写运行在Windows平台的代码。虽然Microsoft通过ECMA实现了C#语言和CLR的标准化,但是专门用来支持非Windows平台C#的资源(包括Microsoft内部的和外部的)总量相对较少。这意味着,如果很注重多平台支持,那么诸如Java等语言可能是更明智的选择。因此,C#可在以下情况用于编写跨平台代码:

  • C#代码运行在服务器上,生成可运行在任意平台的DHTML。这正是ASP.NET采用的方法。
  • C#代码运行在一个非Microsoft Common Language Runtime的运行时环境中。最典型的例子是Mono项目,它具有自己的C#编译器和运行时环境,可运行在Linux、Solaris、Mac OS X和Windows上。
  • C#代码运行在一台支持Microsoft Silverlight (支持Windows和Mac OS X)的主机上。这是一种与Adobe Flash Player类似的新技术。

1.5 C#与CLR的关系

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

1.6 CLR和.NET Framework

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

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. DevExpress GridControl 在窗体默认皮肤下 设置其他皮肤

    gridControl 属性里 LookAndFeel.UseDefaultLookAndFeel = False SkinName 可以选择自带的皮肤

  2. combox下拉框控件

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  3. 05-python的输入与输出

    python输入(input)与输出(print) 一.输入(input) 在python3中,input会将接收到的用户输入自动存储为字符串类型 username = input('输入用户名:') ...

  4. element+Vue el-form组件进行查询时,当输入框仅有一项时,回车自动提交表单,浏览器会刷新页面

    vue的写法就是el-form上添加阻止默认事件 @submit.native.prevent <el-form ref="queryForm" label-width=&q ...

  5. 使用windows平板学习与办公的一些经历(酷比魔方i9篇)

    大概是在2019年的时候,我在某平台上购买了900元的二手windows平板电脑,酷比魔方i9 首先谈谈背景.当时我手里是有个笔记本,屏幕大概15.6寸,4G+256G的,平时用的时候功率平均20几W ...

  6. 解决gpg: 从公钥服务器接收失败:服务器故障

    xxx@xxx-virtual-machine:~/workspace/rv1126_rv1109_sdk$ sudo apt-key adv --keyserver hkp://keyserver. ...

  7. Mac安装Nvm Node开发环境

    1.什么是nvm? nvm 是 Mac 下的 node 管理工具,可以在同一台电脑上安装多个Node.js版本灵活切换. 2.安装前的准备 a. 卸载已安装到全局的 node/npm  如果之前是在官 ...

  8. CentOS下下查看硬盘型号、大小等信息(含Raid)

    一.普通模式(该机硬盘没有做磁盘阵列) 1.fdisk -l 查看你的硬盘编号,如sda,sdb 等 2.smartctl --all /dev/sda [html] view plain copy ...

  9. JAVA流程控制(查漏补缺)

    JAVA流程控制(查漏补缺) 目录 JAVA流程控制(查漏补缺) if 判断 switch多重选择 编译检查 for循环 for each break和continue if 判断 要判断引用类型的变 ...

  10. python打包生成exe报错

    如图所示    如果出现的是这个问题可以可以考虑以下方法 首先卸载原先下载的 Pyinstaller pip uninstall pyinstaller 再执行以下代码,去github上下载 pip ...