C# 学习笔记(一)-- C# 语言和 .NET 框架

khose 2020/9/2 16:03:46

导语之前曾经自学过一段时间的 C# ,也写过一些 WinForm 的小工具。个人认为 C# 是我所见过的用法最为优雅,使用起来最为舒服的语言,因此便对 C# 喜爱有加。但后来由于微软的固步自封,使得 C# 只能在 Windows 平台上发挥作用,而随后,开源跨平台成为历史发展的趋势。因…

导语

之前曾经自学过一段时间的 C# ,也写过一些 WinForm 的小工具。个人认为 C# 是我所见过的用法最为优雅,使用起来最为舒服的语言,因此便对 C# 喜爱有加。但后来由于微软的固步自封,使得 C# 只能在 Windows 平台上发挥作用,而随后,开源跨平台成为历史发展的趋势。因此不得已只好放弃。

虽然有点晚,但是微软终于是迷途知返。首先出现了开源跨平台的 .NET Core 项目,近来听闻微软又打算将 .NET Core 和 .NET Framework 合二为一成为一个完全开源跨平台的 .NET 项目,即 .NET 5。因此决定重新再学习以下 C# 和 ASP.NET 平台,用它来主力开发 Web 项目。便决定将学习过程中的笔记和总结卸载这里。

本次学习使用的书籍是《C# 7.0 in a Nutshell》。在这篇文章写成之时,C# 8.0 其实已经面试很长时间了,但无奈市面上包含 C# 8.0 的书籍很少,因此便使用了这本书。

C# 语言

关于 C# 的定义,书中给出的第一句话是:

C# 是一门通用的,类型安全的,面向对象的变成语言。

这应该是一个盖棺性质的定论了。讲出了 C# 最想突出的特性。而 C# 的目标,或者说诞生的目的,就是为提高生产力。为了达到这个目的,C# 对以下三个方面进行了平衡:

  • 简洁性
  • 表达能力
  • 性能

C# 被设计为一个平台无关的,也就是跨平台的语言,但是由于种种原因,其长期服务于 Windows 这一个平台。

C# 的面向对象特性

C# 作为一个面向对象的语言,它有着丰富的功能来更好的支持面向对象特性。接下来我们主要从几个方面阐述以下 C# 语言的面向对象特性。

统一的类型系统

C# 的所有类型,无论是原始类型还是用户自定义类型,都是继承同一个基础类型,即 object 类型。因此所有类型都具有某些相同的原始功能。

例如,所有的类型都具有 ToString() 这个方法,它将对象转换成对应的字符串。

类( class )和接口( interface )

与 C++ 语言不同的是,C# 语言的类不支持多继承,因此一个子类无法从多个基类中派生,也无法具有多个类的特性。但 C# 并非不能达成这个目的,而是采用来更规范的类型,即接口。

接口只声明函数而不定义函数的实体,类似于 C++ 中的纯虚函数,但是与类不同的是,接口只能够拥有这些“纯虚函数”。一个类可以继承于多个接口。

属性( property ),方法( method )和事件( event )

在大部分的面向对象编程语言中,所有的函数都是方法。而 C# 并不是这样,函数也可以是属性和事件。

属性是封装了一个对象状态的函数成员,它通常用来表示和操作一个对象的字段。

事件是函数成员,它简化了对对象更新的操作。

C# 的纯洁( purity )模式

C# 语言也具有一些函数式编程的特性。函数式编程的核心是避免使用值可以改变的变量。C# 主要通过匿名函数,本地函数和 Lambda 表达式支持这个特性。

C# 的类型安全

类型安全指的是数据实例只能够按照定义好的方式相互作用。它保证了数据内部信息的完整性。C# 支持静态类型。这意味着这些数据的类型在编译阶段就被确定类,并且不可更改。因此许多关于类型的错误能够在编译阶段被发现。

C# 也可以通过 dynamic 关键字来支持动态类型,这个类型依然会在编译阶段被确定。

C# 是一个强类型的语言,这就是说你不能将一个 int 类型的变量传给一个参数是 string 类型的函数。

C# 的内存管理

C# 编译器会将一个垃圾回收器( garbage collection )作为程序的一部分一起运行。垃圾回收器会自动回收那些不再被需要的内存。一段内存被判定为不再被需要的标准时,这段内存没有被活跃的引用变量指向。

根据我的经验,内存不会被马上回收,而是由垃圾回收器选择时机进行回收。

公共语言运行时

最后来简要介绍一下公共语言运行时( Common Language Runtime or CLR )。公共语言运行时是 .NET 框架的基础。C# 语言不会被直接编译成机器语言,而是被编译器编译成一种中间语言( Intermediate Language or IL)。公共语言运行时在程序执行的时候加载中间语言,然后在运行的时候将他们翻译成对应架构的机器语言。这种方式叫做 Just in Time( JIT )编译。

随时随地学软件编程-关注百度小程序和微信小程序
关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。
本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。
[C# 学习笔记(一)-- C# 语言和 .NET 框架]http://www.zyiz.net/tech/detail-146559.html

上一篇:终于弄明白了 Singleton,Transient,Scoped 的作用域是如何实现的

下一篇:深度解析OAuth 2.0授权!!

赞(0)

共有 条评论 网友评论

验证码: 看不清楚?
    关注微信小程序
    程序员编程王-随时随地学编程

    扫描二维码或查找【程序员编程王】

    可以随时随地学编程啦!

    技术文章导航 更多>
    扫一扫关注最新编程教程