
C#学习笔记
学习刘铁猛老师视频https://www.bilibili.com/video/BV13b411b7Ht?p=1
个人用C#学习笔记
Mr_Tfos
这个作者很懒,什么都没留下…
展开
-
C#学习笔记 接口隔离
反射与依赖注入反射:以不变应万变(更松的耦合)反射与接口的结合反射与特性的结合依赖注入:此DI非彼DI,但没有彼DI就没有此DI……原创 2021-04-17 10:23:30 · 205 阅读 · 0 评论 -
C#学习笔记 接口,依赖反转,单元测试
接口与单元测试接口的产生:自底向上(重构),自顶向下(设计)C#中接口的实现(隐式,显式,多接口)语言对面向对象设计的内建支持:依赖反转,接口隔离,开/闭原则……对存储在整型数组ArrayList里的整数进行求和、求平均值。1.在不使用接口的情况下,需要写4个函数。因为C#语言是强类型语言,用来操作整型数组的函数,是不能操作ArrayList实例的。在没有使用接口/契约的情况下,是非常不方便的。 static void Main(string[] args) {原创 2021-04-14 18:31:40 · 246 阅读 · 0 评论 -
C#学习笔记 抽象类与开闭原则
什么是接口和抽象类接口和抽象类都是“软件工程产物”具体类→抽象类→接口:越来越抽象,内部实现的东西越来越少抽象类是未完全实现逻辑的类(可以有字段和非public成员,它们代表了“具体逻辑”)抽象类为复用而生:专门作为基类来使用,也具有解耦功能封装确定的,开放不确定的,推迟到合适的子类中去实现接口是完全未实现逻辑的“类”(“纯虚类”;只要函数成员;成员全部public)接口为解耦而生:“高内聚,低耦合”,方便单元测试接口是一个“协约”,早已为工业生产所熟知(有分工必有协作,有协作必有协约)原创 2021-04-08 18:20:08 · 202 阅读 · 0 评论 -
C#学习笔记 重写,多态
类的继承类成员的“横向扩展”(成员越来越多)类成员的“纵向扩展”(行为改变,版本增高)类成员的隐藏(不常用)重写与隐藏的发生条件:函数成员,可见,签名一致构成重写:在父类的成员标记上virtual,然后在子类的成员标记上override,这样就构成了子类的成员对父类的成员进行重写。如果不加virtual和override,则称为子类成员对父类成员的隐藏。 class Program { static void Main(string[] args)原创 2021-04-08 16:20:35 · 118 阅读 · 0 评论 -
C#学习笔记 类的继承,类成员的访问
类声明的全貌声明既定义(C#与Java)最简单的类声明类的访问控制类成员的访问控制类的继承派生类对基类的成员获得与访问在派生类中访问基类的成员构造器的不可继承原创 2021-04-05 20:11:49 · 356 阅读 · 0 评论 -
C#学习笔记 什么是类
什么是“类”是一种数据结构(data structure)类是一种抽象数据结构。类本身是一个抽象的结果;类也是抽象数据和行为的载体。是一种数据类型类是一种引用类型,具体到每一个类上,每一个类都是一个自定义的类型。代表现实世界中的“种类”类是一种数据结构,它可以包含数据成员(常量和字段)、函数成员(方法、属性、事件、索引器、运算符、实例构造函数、静态构造函数和析构函数)以及嵌套类型。类类型支持继承,继承是一种机制,它使派生类可以堆基类进行扩展和专用化。——《C#语言规范》构原创 2021-04-02 11:39:41 · 840 阅读 · 0 评论 -
C#学习笔记 事件(下)
事件的声明事件的声明完整声明事件是基于委托的(两层意思):第一层:事件需要委托类型来做一个约束,这个约束既规定了事件能发送什么样的消息给事件的响应者,也规定了事件响应者能收到什么样的消息。这就决定了事件响应者的事件处理器必须能够和这个约束匹配上,它才能够订阅这个事件。第二层:当事件的响应者向事件的拥有者提供了能够匹配这个事件的事件处理器之后,需要有个地方把这个事件处理器保存或记录下来。能够记录/引用方法的任务只有委托类型的实例才能做到,所以我们用到了委托。总结:事件这种成员无论从表层约束来原创 2021-03-31 16:26:36 · 98 阅读 · 0 评论 -
C#学习笔记 事件(上)
初步了解事件定义: 单词Event,译为“事件”《牛津词典》中的解释是“a thing that happens,especially something important”通顺的解释就是“能够发生的什么事情”角色: 使对象或类具备通知能力的成员(中译)事件(Event)是一种使对象或类能够提供通知的成员(原文)An event is a member that enables an object or class to provide notifications.“对象O拥有一个原创 2021-03-30 20:37:49 · 144 阅读 · 0 评论 -
C#学习笔记 委托
什么是委托委托(delegate)是函数指针的“升级版”实例:C/C++中的函数指针一切皆地址变量(数据)是以某个地址为起点的一段内存中所存储的值函数(算法)是以某个地址为起点的一段内存中所存储的一组机器语言指令直接调用与间接调用直接调用:通过函数名来调用函数,CPU通过函数名直接获得函数所在地址并开始执行→返回间接调用:通过函数指针来调用函数,CPU通过读取函数指针存储的值获得函数所在地址并开始执行→返回Java中没有与委托相对应的功能实体委托的简单使用Acti原创 2021-03-25 19:52:18 · 196 阅读 · 0 评论 -
C#学习笔记 数组、具名、可选参数,扩展方法(this参数)
数组参数必须是形参列表中的最后一个,由params修饰举例:String.Format方法和String.Split方法 static void Main(string[] args) { //int[] myIntArray = new int[] { 1, 2, 3 }; //int result = CalculateSum(myIntArray); int result = Calcula原创 2021-03-22 17:51:36 · 193 阅读 · 0 评论 -
C#学习笔记 输出参数
输出参数用 out 修饰符声明的形参是输出形参。类似于引用形参,输出形参不创建新的存储位置。相反,输出形参表示的存储位置恰是在该方法调用中作为实参给出的那个变量所表示的存储位置。当形参为输出形参时,方法调用中的相应实参必须由关键字 out 并后接一个与形参类型相同的 variable-reference组成。变量在可以作为输出形参传递之前不一定需要明确赋值,但是在将变量作为输出形参传递的调用之后,该变量被认为是明确赋值的。在方法内部,与局部变量相同,输出形参最初被认为是未赋值的,因而必须在使用它的值原创 2021-03-22 16:45:12 · 929 阅读 · 0 评论 -
C#学习笔记 引用参数
引用参数引用形参是用 ref 修饰符声明的形参。与值形参不同,引用形参并不创建新的存储位置。相反,引用形参表示的存储位置恰是在方法调用中作为实参给出的那个变量所表示的存储位置。当形参为引用形参时,方法调用中的对应实参必须由关键字 ref 并后接一个与形参类型相同的 variable-reference组成。变量在可以作为引用形参传递之前,必须先明确赋值。在方法内部,引用形参始终被认为是明确赋值的。声明为迭代器的方法不能有引用形参。值类型 class Program {原创 2021-03-22 15:36:34 · 864 阅读 · 0 评论 -
C#学习笔记 传值参数
传值参数声明时不带修饰符的形参是值形参。一个值形参对应于一个局部变量,只是它的初始值来自该方法调用所提供的相应实参。当形参是值形参时,方法调用中的对应实参必须是表达式,并且它的类型可以隐式转换为形参的类型。允许方法将新值赋给值参数。这样的赋值只影响由该值形参表示的局部存储位置,而不会影响在方法调用时由调用方给出的实参。值类型: class Program { static void Main(string[] args) {原创 2021-03-19 17:36:10 · 325 阅读 · 0 评论 -
C#学习笔记 常量
常量什么是常量常量(constant)是表示常量值(即,可以在编译时计算的值)的类成员常量隶属于类型而不是对象,即没有“实例对象”“实例常量”的角色由只读实例字段来担当注意区分成员常量与局部常量常量的声明各种“只读”的应用场景为了提高程序可读性和执行效率——常量为了防止对象的值被改变——只读字段向外暴露不允许修改的属性——只读属性(静态或非静态),功能与常量有一些重叠当希望成为常量的值其类型不能被常量声明接受时(类、自定义结构体)——静态只读字段 clas原创 2021-03-18 18:04:40 · 129 阅读 · 0 评论 -
C#学习笔记 索引器
索引器(概述)什么是索引器索引器(indexer)是这样一种成员:它使对象能够用与数组相同的方式(即使用下标)进行索引索引器的声明参见C#语言定义文档注意:没有静态索引器1.索引器通常用于集合类型(下例代码的非集合类型情况很少见);2.平时对于初学者很少有机会写索引器。 class Program { static void Main(string[] args) { Student stu = new S原创 2021-03-18 17:30:49 · 124 阅读 · 0 评论 -
C#学习笔记 属性
什么是属性属性(property)是一种用于访问对象或类型的特征的成员,特征反映了状态属性是字段的自然扩展从命名上看,field更偏向于实例对象在内存中的布局property更偏向于反映现实世界对象的特征对外:暴露数据,数据可以是存储在字段里的,也可以是动态计算出来的对内:保护字段不被非法制“污染”属性由Get/Set方法进化而来又一个“语法糖”——属性背后的秘密属性的声明完整声明——后台(back)成员变量与访问器(注意使用code snippet和refactor工具).原创 2021-03-18 16:52:43 · 615 阅读 · 0 评论 -
C#学习笔记 字段
什么是字段字段(field)是一种表示与对象或类型(类与结构体)关联的变量字段是类型的成员,旧称“成员变量”与对象关联的字段亦称“实例字段”与类型关联的字段称为“静态字段”,由static修饰字段的声明参见C#语言定义文档尽管字段声明带有分号,但它不是语句字段的名字一定是名词字段的初始值无显示初始化时,字段获得其类型的默认值,所以字段“永远都不会未被初始化”实例字段初始化的时机——对象创建时静态字段初始化的时机——类型被加载(load)时只读字段实例只读字段.原创 2021-03-16 11:31:14 · 932 阅读 · 0 评论 -
C#学习笔记 语句
声明语句声明局部变量或常量。声明语句可以出现在块中,但不允许它们作为嵌入语句使用。局部变量声明int x = 100;//声明变量的时候,追加了变量的初始化器。int x;x = 100;//声明的时候没有初始化,在后面对变量进行了赋值。数组初始化器 int[] myArray = { 1, 2, 3 }; Console.WriteLine(myArray[1]);局部常量声明 const int x = 100; //常量在声明的同时,必须跟上初始化原创 2021-03-15 18:46:43 · 672 阅读 · 0 评论 -
C#学习笔记 操作符(下)
各类操作符的示例类型转换隐式(implicit)类型转换不丢失精度的转换子类向父类的转换装箱显式(explicit)类型转换有可能丢失精度(甚至发生错误)的转换,即cast拆箱使用Convert类ToString方法与各数据类型的Parse/TryParse方法自定义类型转换操作符示例...原创 2021-03-11 19:30:46 · 144 阅读 · 0 评论 -
C#学习笔记 操作符(中)
各类操作符的示例关键字 varusing System;namespace OperatorsExample{ class Program { static void Main(string[] args) { var x = 100; //var声明隐式类型变量,推断数据类型 Console.WriteLine(x.GetType().Name);原创 2021-03-09 15:59:18 · 97 阅读 · 0 评论 -
C#学习笔记 操作符(上)
操作符的本质操作符的本质是函数(即算法)的“简记法”假如没有发明“+”、只有Add函数,算式3+4+5将可以写成Add(Add(3,4)5)假如没有发明“x”、只有Mul函数,那么算式3+4x5将只能写成Add(3,Mul(4,5)),注意优先级操作符不能脱离与它关联的数据类型可以说操作符就是与固定数据类型相关联的一套基本算法的简记法示例:为自定义数据类型创建操作符using System;namespace CreateOperator{ class Progr原创 2021-03-08 17:50:46 · 150 阅读 · 0 评论 -
C#学习笔记 DEBUG
如何对方法进行debug设置断点(breakpoint)点击代码行数左侧的空白设置断点,运行DEBUG,程序会停在这里,可以在此处观察当前代码的值。观察方法调用时的call stackcall stack的最顶层,就是当前被调用的函数;双击下面一行,会定位绿色的代码,这一行调用了刚才看的方法。Step-in, Step-over, Step-outStep-into 一步一步运行代码过程Step-over 跳过调用方法直接获得结果Step-out 回到调用该方法的那层原创 2021-03-06 19:52:47 · 361 阅读 · 0 评论 -
C#学习笔记 方法的重载(Overload)
方法的重载调用重载方法的示例声明带有重载的方法方法的签名(method signature)由方法的名称、类型形参的个数和它的每一个形参(按从左到右的顺序)的类型和种类(值、引用或输出)组成。方法签名不包含返回类型。实例构造函数签名由它的每一个形参(按从左到右的顺序)的类型和种类(值、引用或输出)组成。重载决策(到底调用哪一个重载):用于在给定了参数列表和一组候选函数成员的情况下,选择一个最佳的函数成员来实施调用。在Console类中,定义了19个叫做WriteLine的方法,但这19原创 2021-03-06 18:21:23 · 297 阅读 · 0 评论 -
C#学习笔记 构造器
构造器构造器(constructor)是类型的成员之一狭义的构造器指的是“实例构造器”(instance constructor)如何调用构造器声明构造器构造器的内存原理P9 11:40声明和调用构造器using System;namespace Constructor{ class Program { static void Main(string[] args) { Student stu = new原创 2021-03-06 17:04:29 · 490 阅读 · 0 评论 -
C#学习笔记 方法的声明与调用
声明方法的语法参见C#语言文档(声明/定义不分家)Parameter全称为"formal parameter"形式上的参数,简称“形参”Parameter是一种变量方法的命名规范大小写规范需要以动词或者动词短语作为名字重温静态(static)方法调用方法Argument中文C#文档的官方译法为“实际参数”,简称“实参”,可理解为调用发发时的真实条件调用方法时的argument列表要与定义方法时的parameter列表相匹配C#是强类型语言,argument是值、par.原创 2021-03-06 11:50:39 · 229 阅读 · 0 评论 -
C#学习笔记 变量、对象与内存
什么是变量表面上来看(从C#代码的上下文行文上来看),变量的用途是存储数据实际上,变量表示(对应着)变量的值在内存中的存储位置,并且每个变量都有一个类型,以决定什么样的值能够存入变量变量一共有7种静态变量,实例变量(成员变量,字段),数组元素,值参数,引用参数,输出形参,局部变量狭义的变量指局部变量,因为其他种类的变量都有自己的约定名称简单的说,局部变量就是方法体(函数体)里声明的变量变量的声明有效的修饰符组合类型 变量名 初始化器...原创 2021-03-05 18:46:41 · 334 阅读 · 0 评论 -
C#学习笔记 C#语言的类型系统
C#的五大数据类型类(Classes):如Window,Form,Console,String结构体(Structures):如Int32,Int64,Single,Double枚举(Enumerations):如HorizontalAlignment,Visibility接口(Interfaces)委托(Delegates)C#类型的派生谱系第一组和引用类型相关,第二组和值类型相关。蓝色部分:1.这些关键字都是现成的数据类型,而且都是特别常用的数据类型,常用到C#已经吸收为自己的关.原创 2021-03-05 11:11:08 · 205 阅读 · 1 评论 -
C#学习笔记 类型在C#语言中的作用
一个C#类型中所包含的信息有:存储此类型变量所需的内存空间大小此类型的值可表示的最大、最小值范围此类型所包含的成员(如方法、属性、事件等)此类型由什么基类派生而来程序运行的时候,此类型的变量分配在内存的什么位置List item此类型所允许的操作(运算)using System;using System.Reflection;using System.Windows.Forms;namespace TypeSample{ class Program {原创 2021-03-05 10:08:02 · 243 阅读 · 2 评论 -
C#学习笔记 算法
给一个整数x,需要把x到1的整数打印出来:循环using System;namespace AlgorithmSample{ class Program { static void Main(string[] args) { Calculator c = new Calculator(); c.PrintXTo1(10); } } class Calculator原创 2021-03-04 11:55:35 · 218 阅读 · 1 评论 -
C#学习笔记 变量和方法
变量是存放数据的地方,简称“数据”变量的声明变量的使用方法(函数)是处理数据的逻辑,又称“算法”方法的声明方法的调用using System;namespace MyExample{ class Program { static void Main(string[] args) { var a = 1.2f; //单精度浮点型 //var自动获.原创 2021-03-04 10:49:15 · 178 阅读 · 1 评论 -
C#学习笔记 静态与实例
静态成员与实例成员静态(Static)成员在语义上表示它是"类的成员"实例(非静态)成员在语义上表示它是"对象的成员"using System;using System.Windows.Forms;namespace StaticSample{ class Program { static void Main(string[] args) { Console.WriteLine("Hello!"); //静态(s原创 2021-03-03 18:12:05 · 168 阅读 · 1 评论