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. SAP FBL1N屏幕增强,增加自定义的列

    需求 因财务想要在查看未清和已清凭证的时候,看到是该凭证是否哪一个采购人员创建,因此新增一列创建人,关联关系是 EKKO-EBELN=BSEG-ZUONR,这里关联分配号是因为之前开发自动清账的时候做 ...

  2. vue实现随机生成图形验证码

    效果展示 安装插件 npm i identify 定义组件 verificationCode.vue <template> <!-- 图形验证码 --> <div cla ...

  3. 你到底懂不懂JavaScript?来做做这12道面试题试试!

    携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第 21 天,点击查看活动详情 JavaScript 是每一个前端开发者都应该掌握的基础技术,但是很多时候,你可能并不完全懂 Jav ...

  4. AWG含义及尺寸电流对照表-转载

    AWG含义及尺寸电流对照表 - 麦穗鱼~ - 博客园 (cnblogs.com) AWG(American wire gauge)美国线规,是一种区分导线直径的标准,又被称为 Brown & ...

  5. Windows11使用WSL Ubuntu搭建paddle的GPU环境

    Windows11使用WSL Ubuntu搭建paddle的GPU环境 最近升级到了Windows11,突然有个大胆的想法:在Windows11上安装WSL,将所有开发环境安装到WSL中.这样就能在w ...

  6. 【Linux】Linux网络编程

    socket 默认开启的socket是阻塞的,想要设置非阻塞的话,可以用 fcntl设置为 nonblock:或者使用setsockopt进行更多设置: 一般使用推荐 设成nonblock,然后epo ...

  7. JS form表单数据校验及失效情况下的解决方案

    如下图,当执行提交操作之前,我们需要对序号,要求完成时间,责任人,措施内容四项进行非空,字符长度及输入内容的类型进行校验. 直接贴样式代码 <div class="wrapper an ...

  8. 跨平台Docker篇

    前言 总结自 老张的哲学b站视频[10分钟学会Blog.Core(ASP.NETCORE)基本完结]https://www.bilibili.com/video/BV1vC4y1p7Za?vd_sou ...

  9. antd 动态添加表格列 表格不更新

    原因:react 对比columns 数组为原数组,内存地址没变: 解决办法:用es6的扩展,生成新数组,添加操作列operateCol setTableColumns([...tableColums ...

  10. CSP202104-4 校门外的树

    设状态时,首先从简单状态设起: 一维不行再试二维.简单状态应付不了再设复杂的(因为某些状态可以体现在状态转移的过程中,或者说状态转移方程中,不一定体现在原式中) E.g. 计算机软件能力认证考试系统- ...