当前位置:   article > 正文

C#简介简介和基础(一)

c#

一、C#简介

1、C#简介

一、特点:
1、通用性语言
2、类型安全
3、面向对象

二、目标:
1、生产力
2、简洁性
3、表达力
4、高性能

三、创作者:Anders Hejlsberg
·Turbo Pascal的创作者
·Delph的主设计师
·Typescript的创作者
·C#是平台中立的,与平台无关

2、面向对象

一、封装:为对象(object)创造一个边界,来把外部的一些行为和内部的实现细节给分开。 通常对外部的行为就是public方法,而内部的实现细节通常是private方法。
二、继承
三、多态

C#的面向对象特性
·统一的类型系统
·类型

C#里的基本构建块,是一个封装了数据和函数的这么一个单元,这个单元叫做“类型”。

·共同的基类

C#里既然是一个统一的类型系统,所有类型都共同共享了一个基本类型,这个基本类型的名字就是object。这一特点呢,也决定无论你是什么样的类型,包括原始的数值型类型,或者是你自定义的业务型类型,都会共享着一些基本功能。 这些基本的功能呢,就来自于这些类型。

比如说,任何类型的实例,都可以通过to string这个方法把它转化为字符串。这是其中一个基本的功能。

·类和接口
·Class

在传统的面向对象的范式里,唯一的Type就是Class

·Interface

而在C#里面呢,还有其他的类型,比如说这个interface,interface看起来跟class挺像的,但它只对这个成员进行描述而没有具体的实现,而具体实现是由继承了这个接口的其他类型进行实现

接口在什么情况下会特别有用呢?就是在需要多重继承的场景会特别有用。比如说C++这个语言就支持多继承。而C#不支持多继承,想要支持多继承的场景,那我们就使用interface.

·属性(Property)、方法(Method)、事件(Event)
唯一一种函数成员(Function Member)

方法(Method);在纯粹的面向对象的范式里,所有的函数都是方法。

·方法还包括:属性(Property)和事件(Event),还有其他的

·属性(Property) 本身就是方法的其中一种,所以它也是函数成员。它呢,封装了对象的一部分状态。举个例子,比如说按钮这个对象,它的颜色就可以是一个属性。

·事件(Event) 也是方法的一种,也是函数成员。简化了对象状态更改的操作。

·C#主要是一种面向对象的语言

但是也借用了不少函数式编程的特性

·函数可以当作值来对待

·委托 Delegate

在C#里我们可以使用委托,通过委托,C#就允许函数可以像值一样被存进其他的函数,也可以从其他的函数来返回。

·支持纯(purity)模式

·避免使用值可变的变量

这就是函数编程的核心,也是一种对声明式模式的一种赞同。而在C#里面,就有一些特性,它可以来支撑这些模式。比如说**C#里可以编写一些动态的,捕获一些匿名变量的一些函数,在C#里这个叫lamda表达式。**再比如,C#可以通过这种查询表达式来执行列表或者说是响应式编程C#可以很简单的定义出只读字段。

3、类型安全

·C#主要是一种类型安全的语言

类型的实例,只能通过定义好的协议来进行交互,从而保证类型的内部一致性。 比如说:你想把一个字符串类型像一个整数类型来操作,那就是不可以的。更具体的来说,C#支持一下三种类型

·静态类型 Static Typing:

在编译的时候,就会保证这个语言的类型安全。这个类型就可以保证在这个程序运行之前,它可以消灭一大堆的错误。 消灭一大堆的错误是繁重的,它就相当于把这项繁重的工作从运行时(运行时你可以做单元测试来发现这些大量的错误)移交给了编译器,这样可以保证程序里的所有类型在一起正常工作。

有了这个静态类型,Visual Studio就有了智能提示。C#整体来说还是静态类型的语言

·动态类型 dynamic
·强类型 Strongly Typed language

之所以叫强类型语言,是因为它的类型规则非常严格。比如说,不可以把一个浮点型的数值传递给只接受整型的这么一个函数,除非你对它进行转型。此外,强类型的这个特点呢,也可以保证C#的代码也可以在沙箱中运行。沙箱就是这样一种环境:各方面的安全性都是由数组控制的。在沙箱里,你不可以绕过这个类型的规则来肆意破坏对象的状态。

4、内存管理

·依赖于运行时来执行自动内存管理
·CLR:Common Language Runtime(公共语言运行时)
·GC:Garbage Collecter(垃圾收集器)

作为你程序的一部分,也会来执行的。对于那些不再引用的对象,GC会把它们所占用的内存给收回去,所以内存分配的问题不需要程序员手动处理。

·C#没有消灭指针
·通常情况下不需要使用指针

有时候特别需要性能,或者是互操作性的地方,还是可以使用指针的,也可以手动分配内存,这个时候会把那块代码使用unsafe来给标记起来

·unsafe

5、平台支持

主要是指操作系统平台

·原来C#主要是在Windows上面运行:通过.net framework 运行在Windows上边

·现在可以在所有的平台上运行
·Windows
·Mac
·Linux
·iOS
·Android
·…
·.NET Core: 能运行在Linux和Mac上,主要归功于.NET Core

6、CLR

C#依赖于拥有某些特性的数组里边,具体这些数组需要哪些特性呢?比如说刚才说的自动内存管理,还有异常处理。

·.NET/.NET Core的核心就是CLR:Common Language Runtime

它就提供了刚才所提到的两个运行时的特性

·CLR和语言无关 ,不仅支持C#,还支持F#等。

·C#是一种托管语言
·会被编译成托管代码(IL:Intermediate Language)
·CRL把IL转化为机器(x64,x86)的原生代码

CRL可以把中间语言IL转化为机器的原生语言。

·JIT(Just-In-Time)编译

而CRL什么时候把IL语言转化为机器原生代码呢?就是在刚刚执行操作之前
这种编译就叫做:·JIT(Just-In-Time)编译

·Ahead-of-Time编译

当然呢,他也支持AOT编译,AOT编译可以提升启动速度

·托管代码的容器:Assembly或Portable Executable
·exe或dll

Assembly可以是exe或者是dll。exe就是可执行文件,dll是动态连接库

·包含IL和类型信息(metadata)

Assembly不仅仅包含IL,还包含类型信息,就是因为有类型信息的存在,Assembly之间呢,才可以相互引用。

·lldasm

微软在Windows上边有这么一个工具:lldasm。这个工具可以查看IL源,也就是生成的IL。

7、其他支持的平台/框架

·NET Framework
·NET Core
·Unity
·Xamarin
·UWP
·WinRT
·Windows Phone
·XNA
·Sliverlight
·.NET Micro Framework
·Mono
·SQL Server:
我们是可以在微软SQL Server运行托管代码的。SQL Server可以和CLR集成

**可以使用C#在里面写一些函数或者存储过程什么的,然后使用SQL语言来调用你写的这些函数或者存储过程。**但这个必须和.NET Framework完整的一起来用。

SQL Server里有一个特定数组的CLR,它会形成一个沙箱,它能保护SQL 进程的完整性

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/228663?site
推荐阅读
相关标签
  

闽ICP备14008679号