C# 复习笔记

news2024/11/22 20:29:16

文章目录

  • Visual C# Step By Step
  • C# 7.0核心技术指南
  • 面向对象是怎样工作的

Visual C# Step By Step

1.Net FrameWork:为开发应用程序而创建的一个平台(可以是运行在windows ,也可以是运行在其他操作系统)。例如Mono,它是.net framework的开源版本(包括C# 编译器),该版本可以运行在几个操作系统上,包括Linux 和 Mac Os。另外Mono还有一些版本可以运行在IPhone和Androis。 .Net Framework代码库中定义了一些基本类型,这种公共类型系统(Common Type System,CTS)有助于使用.net framework的各种语言之间进行交互操作;还包含公共语言运行库(Common Language Runtime, CLR),它负责管理.net 库开发的所有应用程序的执行。


2.使用.net 库编写应用程序,就是使用.net 代码库编写代码。为了执行C# 代码,我们必须把他们转换为目标操作系统能理解的语言,即本机代码(native code)。这种转换称为编译代码,由编译器执行。但在.net framework下,此过程包括两个阶段。CIL和JIT。

CIL:在编译使用.net 库代码的时候,不是立即创建勇于操作系统的本机代码,而是把代码编译为通用中间语言(CIL)代码,这些代码并非专门用于任何一种操作系统,也非专门用于C#。在开发C#应用程序时,这个编译步骤由VS完成。

JIT:显然要执行应用程序,必须完成更多工作,这是Just-In-Time(JIT)编译器的任务,它把CIL编译为专用于OS和目标机器结构的本机代码。这样OS才能执行应用程序。这里编译器的名称Just-In-Time反映了CIL代码仅在需要时才编译的事实。这种编译可以在应用程序的运行过程中动态发生,不过开发人员一般不需要关心这个过程。(提示:MSL或IL是CIL的旧称。)

程序集:编译应用程序时,所创建的CIL代码存储在一个程序集中。程序集包括可执行的应用程序文件(这些文件可以直接在windows 上运行,不需要其他程序,其扩展名是.exe)和其他应用程序使用的库(.dll)。除了CIL外,程序集还包括元信息(即程序集中包含的数据信息,也称为元数据)和可选的资源(CIL使用的其他数据,声音图片)。元信息允许程序集是完全自描述的,不需要其他信息就可以使用程序集,也就是说,我们不会遇到没有把需要的数据添加到系统注册表中这样的问题,而在使用其他平台进行开发时这个问题常常出现。

部署:因此部署就很简单了。只需把文件复制到远程计算机的目录下即可。因为不需要目标系统上的其他信息,所以只需从该目录中运行可执行文件即可(假定安装了.net CLR)。

托管代码:在将代码编译为CIL,再用JIT编译器将它编译为本机代码后,CLR的任务尚未全部完成,还需要管理正在执行的用.net 库编写的代码(这个执行代码的阶段通常称为运行时(runtime)),即CLR管理着应用程序。利用CLR的托管功能,让.net 处理与操作系统的任何交互。

托管代码和非托管代码:主要区别在于程序执行时内存管理的方式。托管代码由运行时统一管理,通过运行时与底层(硬件和操作系统)交互,非托管代码是直接在操作系统上运行的,意味着程序员要手动开辟和释放内存。

虚拟机中调用非托管代码:托管代码必须在托管平台(运行时)上运行,然而我们却可以在虚拟机中运行非托管代码。Mono使用P/Invoke技术实现在托管代码中调用非托管代码中的函数。P/Invoke技术是.net framework提供的一种机制,勇于在托管代码中调用非托管代码。使用P/Invoke技术需要使用DLLImport特性声明非托管函数的签名,并注意数据类型和调用约定的匹配。在调用非托管函数时,需要手动管理内存,以避免内存泄漏和其他内存相关的问题。

垃圾回收: 托管代码最重要的一个功能是垃圾回收。

链接:多个源文件编译到一个程序集中。

总结下流程就是:源文件C#代码先被编译为CIL中间代码,存储在程序集中,运行程序集(执行程序的时候),再由JIT编译器编译为本机代码,在托管的CLR(公共运行时)环境下运行本机代码。


3.面向对象

委托:是一种存储函数引用的类型。委托的声明类似于函数,但不带函数体,且要使用deltegate关键词。定义了委托后,就可以声明该委托类型的变量。接着把这个变量初始化为与委托具有相同返回类型和参数列表的函数引用。例如,可以把委托变量作为参数传递给一个函数,这样该函数就可以使用委托调用它引用的任何函数,而且在运行之前不必知道调用的是哪个函数。

接口是公共实例(非静态)方法和属性组合起来,以封装特定功能的一个集合。一旦定义了接口,就可以在类中实现它。

抽象类:不能直接直接实例化,必须继承。抽象类可以有抽象成员,这些成员在基类中没有实现代码,所以派生类必须实现他们。非抽象成员可以有自己的实现。

多态性:在面向对象编程范式中,多态性往往表现为“一个接口,多个功能”。多态就是同一个接口,使用不同的实例而执行不同操作。静态多态性表现为函数重载和运算符重载;动态多态性通过抽象类和虚方法实现。子类继承抽象父类,抽象成员方法在子类可以通过override重写,子类继承父类虚方法时,虚方法在子类也可以通过override重写。

接口的多态性:可以建立接口类型的变量,然后就可以在支持该接口的对象上,使用这个变量来访问该接口提供的方法和属性。

对象之间的关系:继承,包含,集合。

密封类:sealed 关键字,主要用来防止被继承

System.Object:C#中所有类默认继承自System.Object

构造函数,构造函数初始化器,base,this。在创建子类实例时,构造函数的执行序列是:先执行system.object(),再执行父类,最后执行子类自己的。base关键词指定在实例化过程中,使用基类中具有指定参数的构造函数。this关键字指的是调用指定的构造函数前,对当前类使用非默认的构造函数。

类库:VScode 新建类库 生成解决方案 .dll

抽象类和接口:抽象类主要用作对象系列的基类,这些对象共享某些主要特性,例如共同的目的和结构。接口则主要用于类,这些类存在根本性的区别,但仍可以完成某些相同的任务。

在这里插入图片描述
在这样的层次结构中,一些类共享相同的特性,这是因为他们的目的是相同的,而不只是因为他们派生于同一个基类。在进行更详细的分解之前,把对象系统以这种方式进行分解,可以清晰地看到哪种情形适合使用抽象类,哪种情形适合使用接口。只使用接口或只使用抽象继承,就得不到这个示例的结果。

部分类(partial)


4.示例:开发一个类模块(包含两个类);再开发一个简单的客户程序,确保这个模块能正常使用。

规划应用程序:开始编写代码前,应规划一下需要的结构和类的功能。

在这里插入图片描述


5.集合、比较和转换

集合:ICollection,IDictionary, IList.
定义集合:继承抽象类:CollectionBase

在这里插入图片描述
索引器 this 深度复制 IClone

比较:对象之间的比较。类型比较,值比较。

类型比较:在比较对象时,常需要了解它们的类型,才能确定是否可以进行值得比较。GetType()方法,所有的类都从System.Object中继承了这个方法,这个方法和typeof()运算符一起使用,就可以确定对象的类型(并据此执行操作)。

装箱和拆箱:值类型-》引用类型=装箱;反之拆箱。
is运算符:用来检查对象是不是给定类型或是否可以转换为给定类型。

值比较:运算符重载,IComparable

类型转换: as运算符


6.泛型

可空类型 ?
??运算符:允许给可能等于null的表达式提供另一个值。如果第一个操作数不是null,就等于第一个操作数,否则,第二个。
?.空条件运算符

List 泛型集合类型,便捷,易用。不然还需要从CollectBase中派生一个类,然后实现需要的方法。

定义泛型类型:泛型类 泛型接口 泛型方法 泛型委托

泛型类:default 关键字


7.高级C# 技术

:: 运算符,结合gloabl一起使用,表示顶根名称空间的别名。这有助于更清晰地说明要指向哪个名称空间。

定制异常

事件

特性:
读取特性:反射
创建特性

初始化器:对象初始化器,集合初始化器
类型推理:var
匿名类型
动态类型

高级方法参数:
可选参数
Lamda表达式


8.文件

File 、Directory, 流类访问,文件读写,读写压缩数据,
序列化和反序列化对象,监控文件和目录变化

C# 7.0核心技术指南

面向对象是怎样工作的

1.类库 框架 组件
2.设计模式

GoF设计模式
在这里插入图片描述

计算机擅长固定工作记忆工作
固定工作:计算机如实且飞快地执行程序中的命令,只要条件相同,无论执行重复多少次,结果都一样,并不会对工作感到厌倦。
记忆工作:准确存储庞大的信息,并随时取出。
计算机在这两方面相比于人来说有绝对的优势,因此,利用计算机,人们能够变得轻松很多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/789820.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第119天:免杀对抗-二开CSShellcode函数修改生成模版修改反编译重打包(下)

知识点 #知识点: 1、CS-表面特征消除 2、CS-HTTP流量特征消除 3、CS-Shellcode特征消除#章节点: 编译代码面-ShellCode-混淆 编译代码面-编辑执行器-编写 编译代码面-分离加载器-编写 程序文件面-特征码定位-修改 程序文件面-加壳花指令-资源 代码加载面…

C语言-print字符串打印-转义字符妙用

这里有两个有关打印的小知识 打印的字符串内容由两部分组成:可见字符、转义字符;各种字母、数字、以及空格,均属于可见字符,“\”等属于转义字符 举例: 1.直接print里面打印内容,内容直接出现 2.这里想将一…

iptable防火墙

主要作用: 隔离功能,在工作中,防火墙 的主要作用决定哪些数据可以被外网访问以及哪些数据可以进入内网访问 一般部署在网络边缘或者主机边缘,作用于网络层 安全技术: 1、入侵检测系统: 检测病毒、木马&a…

如何进行SQL优化

一、SQL优化的主要步骤 在应用的的开发过程中,由于初期数据量小,开发人员写 SQL 语句时更重视功能上的实现,但是当应用系统正式上线后,随着生产数据量的急剧增长,很多 SQL 语句开始逐渐显露出性能问题,对生…

Oracle转Mysql出现的问题记录

学海无涯,旅“途”漫漫,“途”中小记,如有错误,敬请指出,在此拜谢! 文章目录 前言函数错误concat函数使用有区别代码示例导致问题区别及分析解决方法 时间相减代码示例导致问题区别与分析解决方法 or 不走索…

入门Linux基本指令(1)

本篇文章介绍Linux中的一些常用基本指令来供大家学习和参考。 目录 ls指令 pwd指令 cd指令 .和.. touch指令与mkdir指令 rm指令 man指令 ls指令 语法 : ls [ 选项 ][ 目录或文件 ] 功能 :对于目录,该命令列出该目录下的所有子目录与…

无符号数和有符号数的“bug”

1. 起因 在实现kmp算法时&#xff0c;出现了诡异的现象&#xff0c;看下面的代码&#xff1a; int KMP (const char *s, const char *t) {int lenS strlen (s);int lenT strlen (t);int next[lenT];get_next (next, t);int i 0;int j 0;while (i < lenS && j …

C#安装包制作过程详解

本文讲解C#安装包制作过程。 文章目录 一、安装打包插件二、项目的部署与安装三、制作安装包时注意路径一、安装打包插件 打开VS2017:工具 --> 扩展和更新 --> 联机,搜索Microsoft Visual Studio Installer Projects,如图: 下载Microsoft Visual Studio Installe…

PostgreSQL数据库动态共享内存管理器——Dynamic shared memory areas

dsm.c提供的功能允许创建后端进程间共享的共享内存段。DSA利用多个DSM段提供共享内存heap&#xff1b;DSA可以利用已经存在的共享内存&#xff08;DSM段&#xff09;也可以创建额外的DSM段。和系统heap使用指针不同的是&#xff0c;DSA提供伪指针&#xff0c;可以转换为backend…

Hbase基础概念

HBase 一、HBase的数据模型1.HBase数据存储结构2.HBase存储概念3.HBase基本架构 二、HBase Shell1.DDL(Data Definition Language)2.DML&#xff08;Data Manipulation Language&#xff09; 三、HBase组成架构1. Master架构2. RegionServer架构 四、HBase读写流程1.写流程MemS…

AI数字人:金融数字化转型的“关键先生”

今年年初ChatGPT的火热&#xff0c;在全球掀起一阵生成式AI&#xff08;AIGC&#xff09;热潮。国外的OpenAI、国内的百度等企业&#xff0c;都在AIGC上强力布局。 各种应用场景中&#xff0c;AIGC助力的数字人引起了市场注意。 事实上&#xff0c;数字人不是个新鲜事。早在1…

Linux 系统下 “Verilog” 编程配置

文章目录 简介Verilog HDLIverilogGtkwave 环境搭建软件的安装Vim 之 Verilog 语法高亮配置 简单的计数器示例计数器程序的编写仿真测试 简介 Verilog HDL Verilog HDL 是一种用于设计数字电路的硬件描述语言&#xff0c;它可以用来描述数字电路的功能和结构&#xff0c;并且可…

云服务器AccessKey执行命令

人之所以痛苦&#xff0c;在于追求错误的东西。如果你不给自己烦恼&#xff0c;别人也永远不可能给你烦恼。因为你自己的内心&#xff0c;你放不下。 好好的管教你自己&#xff0c;不要管别人。 漏洞实战 查看所有实例信息 A.exe -a xxx -s xxx ecs -list执行命令 A.exe -a…

新能源汽车充电桩最重要的模块设备是什么

你是否曾经遇到过充电桩无法给你电动汽车提供电源的问题?或者你曾经怀疑过为什么充电桩速度如此缓慢?其实&#xff0c;这一切都可能与充电桩最重要的模块设备——控制主板有关。 交流充电桩由充电桩外壳、控制主板、刷卡模块、计费控制、显示屏、通信模块、继电器、开关电源等…

JumpServer堡垒机

文章目录 JumpServer堡垒机堡垒机介绍堡垒机产生的原因堡垒机主要功能 Jumpserver安装与配置Jumpserver Web界面用户管理资产管理添加Linux主机 命令过来规则创建审计台操作说明会话审计日志审计 工作台操作说明邮箱配置 JumpServer堡垒机 堡垒机介绍 下图来自百度百科 堡垒机…

面试常问八股文之java篇

JAVA篇 1、为什么重写equals方法的时候要重写hashCode方法&#xff1f; 为了不违背“相同对象必须要有相同hash值"的约定&#xff0c;对于基本数据类型比较的是数值是否相等&#xff0c;对于引用类型数据比较的是对象地址是否同等&#xff0c;在object中equal方法也是默…

(学习笔记-IP)IP协议相关技术

DNS 我们在上网的时候&#xff0c;通常使用的方式是域名&#xff0c;而不是IP地址&#xff0c;因为域名方便人类记忆。 那么实现这一技术的就是DNS域名解析器&#xff0c;DNS可以将域名网址自动转换为具体的IP地址。 域名的层级关系 DNS中的域名都是用句点来分隔的&#xff0…

软件升级相关

文章目录 一、升级方案1、移动端升级2、window 升级SquirrelSparkle 一、升级方案 1、移动端升级 腾讯Bugly &#xff0c;支持Android 平台、iOS平台、Cocos2D、Unity3D。 2、window 升级 windows的exe的打包及升级工具 Squirrel Squirrel 是一款免费的开源exe升级工具&a…

NFT市场泡沫破裂了吗?投资NFT是否仍然安全?

近期&#xff0c;NFT市场的价格出现了明显的下跌趋势&#xff0c;许多人开始担心NFT市场是否已经进入了泡沫破裂的阶段。但是&#xff0c;我们需要认真分析这个问题&#xff0c;并且探讨投资NFT是否仍然安全。 NFT&#xff08;Non-Fungible Token&#xff09;是一种非同质化代币…

JMerter安装配置以及使用(笔记记录)

JMerter安装配置以及使用&#xff08;笔记记录&#xff09; 安装JDK安装JMeterJMeter使用元件执行的顺序参数详解参数配置之CSV数据文件设置断言响应断言JSON断言 数据提取XPath提取器JSON提取器 JMeter属性JMeter录制脚本JMeter直连数据库逻辑控制器如果&#xff08;IF&#x…