自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 问答 (5)
  • 收藏
  • 关注

原创 委托、系统委托(Action,Func)

Action是一个无参数但是可以有返回值的委托,参数个数可以有从0~8个,(以下是在系统截取的Action委托的定义)Func是一个有参数可以有返回值的委托,参数个数可以有从0~8个。定义:委托是一个类,它定义了方法的类型,用这个方法类型创建变量就可以存储方法了。//定义一个无返回值无参数的委托,这就代表Del0只能存无参数无返回值的函数。//定义一个有返回值有参数的委托,这就代表Del1只能存无参数无返回值的函数。//int是参数类型,string是返回值类型。return $"{Id}:你好";

2024-10-08 20:20:34 338

原创 LingedList<T>,自定义泛型

/查找,第一个节点会存储在LinkedList类中的LinkedListNode First属性,最后一个节点会存储在LinkedList类中的LinkedListNode Last属性。链表(LinkedList):分为单链表和双链表,单链表的对象存储的是自己的value和下一个对象的address。//上述先创建了第一个节点Value是Mike,又创建了第二个节点Value是Jason,第一个节点指向第二而节点,第二个节点又指向第一个节点。泛型的声明可以有多个,多个泛型使用一个<>,用逗号隔开。

2024-10-08 18:44:37 368

原创 Queue、Hashtable

对于引用类型:equal比较的是两个对象的地址是否相同;对于值类型:equal是比较对象的值,就像struct是值类型,equal就是比较他的成员的值是否相等。gethashcode怎么算的不用管,只要知道对于相同的值,其hashcode也相同。//当我们重写equal函数时,发现编译并没有报错,其实还与该对象的hashcode有关。Queue也是系统提供的一个容器类,底层也是object[],特点是先进先出,可以存储重复元素。//然而我们希望里面的成员相同我们就希望这两个key相同,这就要重写。

2024-10-06 19:30:18 481

原创 ArrayList、Stack类

特点:底层是对object[]进行操作的,可以存储任何的数据类型,所以当需要对不同的数据类型操作时可以使用ArrayList,当对字符串进行操作时,可以选择AtringBuild。//添加范围,ICollection接口对象,所以可以填arraylist类对象,继承了接口的。Console.WriteLine(arrayList.IndexOf("东莞"));//转换数组遍历,转换的数组元素也是按照栈顶到栈底的顺序。//查找:索引,容量(超过也是会扩容的),当前元素个数。//查找:元素个数,栈顶元素。

2024-10-06 16:28:41 762

原创 String、StringBuilder

前面所说了字符串的存储类型,在进行字符串的拼接操作时往往又会重新开辟新的而空间,这样就会创造很多字符串对象,所以系统提供了可变容量的字符串拼接操作。//2.动态创建字符串的情况,当通过一些new或者一些字符串操作时,会开辟新的内存空间。//1.字符串常量池,当使用string="abc"时,系统会判断常量池里有没有,如果有直接拿来用。//比较,==比较字符串的内容是否相等,在string中也是对==做了运算符的重运载定义。//子串,(3)就代表从第三索引之后,(3,5)就代表从第三个到第五个索引。

2024-10-05 20:19:10 637

原创 object

if(this.name==((Person)obj).name&&this.id==((Person)obj).id) //注意优先级,.>转换。public override bool Equals(object obj) //可以查看父类的tostring是virtual所以可以重写。// object.Equals():比较两个对象,是值类型就比值,是引用类型比地址。// obj.Equals()是引用类型就比较地址,是值类型就比较值。//返回该对象的类型(命名空间.类)

2024-10-05 15:53:47 602

原创 sealed关键字、命名空间

/或者不用using,使用demo0.demo1.Add add=new demo0.demo1.Add();后者 :sealed在修饰函数时,必须用于重写的方法之上。(一定是父类--->子类--->孙子类,在子类重写且密封,孙子类不能继续重写)sealed定义:主要用于修饰函数和类,修饰的类被称为密封类不能被继承,修饰的函数叫密封函数不能被子类重写。5.sealed,修饰重写后的函数,防止该函数在派生类中再次重写。4.abstract,定义抽象函数,该函数没有函数体。Wield() //报错。

2024-10-05 11:57:06 256

原创 抽象类、接口

但是只能是public,这是因为接口的目的是定义一组契约,需要对介入接口的类完全可访问,并且是一种规范。2、接口是不能new出对象的,原因它只是定义了一组契约,没有实现的方法,何况没有构造函数,所以接口的实例化只能通过里氏转换。如果一个类中,具有不知道该如何描述功能的函数,那么可以将这个函数描述为抽象函数,具有抽象函数的类叫做抽象类。1、接口只能继承接口,普通类可以继承父类的同时继续实现接口,而且可以是多接口,一旦继承接口就要实现里面的成员。Console.WriteLine("我是中国人,我很自豪");

2024-10-03 20:00:38 501

原创 子类的初始化、多态

如下:new Chinese()既可以被看成Person类也可以被看成Chinese类,这就涉及到了当父类对象指向子类对象的时候,且都具有同名函数,这是当不做任何处理父类对象只能访问父类成员,这时可以使用显性转换(前面所学的),或者vob方式,即:在父类同名函数加上virtual关键字,在子类同名函数中加上override关键字,当还需要调用父类同名函数时,在子类同名函数使用base关键字。过程:创建子类对象的过程(在用new创建子类对象时,默认会先执行父类的无参构造函数)//父类无参构造函数。

2024-10-03 17:09:29 625

原创 c#里氏替换

/is关键字用于检查对象实际运行时类型,虽然传递了Rectangle子类,也进行了隐式转换,但只是把他当作Shape类对象在方法里去使用,实际的对象信息并没有改变(可以理解为不在方法里了他实际还是Rectangle类对象,is就是这个作用)。//shape不能访问Rectangle类的成员,这是因为能否访问成员是根据变量声明决定的,shape是Shape类,决定了他只能访问自己的成员,而不能访问子类的成员。//Rectangle是基类,Shape是父类。定义:父类对象存储子类对象。如果需要则要显示转换。

2024-10-02 19:59:36 863

原创 封装、继承

Console.WriteLine($"图形的名字:{rectangle.Name},长:{rectangle.Length1},宽:{rectangle.Width1},面积:{rectangle.Area()},周长:{rectangle.Circum()}");④访问修饰符角度:将类的成员通过不同访问修饰符的修饰封装在不同的区域;开发者负责具体的实现,而调用者只需要通过类、对象的接口访问即可。一个项目就是一个程序集。应用:这两个类有相互内在联系,子类是父类的的一类,子类需要用父类的成员。

2024-10-02 15:20:56 735

原创 分部类、分部方法

Console.WriteLine($"我的名字:{this.name},年龄:{this.age}");4.分部方法是private的,所以主函数无法调用,只能间接的调用。2.分部方法不能有访问修饰符,默认时private,含义:将类中的字段、属性、构造函数、函数分开。3.分部方法只能是void,无返回值。语法:需要使用partial关键字。分部方法是将函数的声明和实现分开。1.分部方法必须定义在分部类中。

2024-10-02 10:50:54 134

原创 运算符的重运载

当我们在对比两个引用类型的变量时:==和!=是比较两个对象的地址,往往是不相同的,但有时我们只要其中的字段相同时就希望他们相等,这是就需要运算符的重运载。//重运载定义,==,!=要成对使用,否则定义了==,不定义!=的情况就不知所措了。语法:public static 返回值类型 operator 运算符(参数列表)//如果没有重运载,这个时false,尽管字段相同,但是对象的地址时不同的。

2024-10-01 20:21:46 406

原创 this和static关键字、拓展方法

public Student(string name, int age):this() //调用此函数之前执行默认构造函数。//student调用了Studnet(name,age)构造函数,那么构造函数了的this就代表他。//静态构造函数,在第一次使用类名访问的时候,是会执行一次默认静态构造函数的,后面出现的不会。{ //定义静态函数,this代表这个函数是拓展方法,self就相当于实例化了一个对象。⑤当一个类中以上的都是静态,那么自己也是静态类,所以当定义了静态类,那么其成员只能是静态类型。

2024-10-01 17:12:25 898

原创 属性封装、索引器

Console.WriteLine($"我的名字:{student["name"]},性别是:{student["gender"]},年龄:{student["age"]}");1:索引器在定义的时候数据类型用的是object,原因是在返回值时可能有各种类型的数据,所以用object类型,因为他是所有数据类型的基类。{ //字段私有化之后,主函数中无法访问,这时外界可以访问属性进行对字段的设置与获取。字段:我们前面在定义类的时候定义了一些变量特征用来描述一类事物,这些变量就称之为字段。

2024-10-01 12:02:13 707

原创 类和对象、 构造函数、析构函数

当类中特征较多时,在创建对象之后,就要多次的初始化,效率非常的低。Console.WriteLine($"我的名字:{name},性别:{gender},年龄:{age}岁,我的朋友的名字:{friend.name}。Console.WriteLine($"我的名字:{name},年龄:{age},性别:{gender},朋友:{friend.name}");从结果来说执行了两次无参构造函数,可以看到我们在有参构造函数的后面添加了this()就是代表在执行有参构造函数之前执行一下无参构造函数。

2024-09-30 20:56:21 846

原创 函数递归、枚举、结构体

Console.WriteLine($"名字{people1.name},年龄{people1.age},性别{people1.sex}");Console.WriteLine($"名字{people.name},年龄{people.age},性别{people.sex}");在函数中调用自己称为函数递归,无结束条件的递归是没有作用的,所以在使用递归的时候一定要有结束条件。枚举元素底层是以整数存储的,默认从0开始,也可以指定,直接在枚举元素中赋值即可。//结束条件就是number>=1的时候不在调用。

2024-09-30 11:20:39 837

原创 可变参数、函数重载

/赋初值,因为out的使用,num1已经“无效了”。Console.WriteLine($"这些数的和为{num}");函数的重载::函数名相同但是参数列表不同(包括数据类型、参数数量、参数顺序)//当需要涉及另一个参数时,请放在可变参数之前。当不确定形参的个数的时候,可以使用可变参数。定义语法params + 数据类型[]+名称。如上,相同的函数名却有着不同的作用。

2024-09-30 09:09:32 232

原创 函数、ref、out

上章我们讲过:引用类型的传递参数是把地址传递过去,导致在地址上的变化也会对原有的进行改变,而值类型不会有影响。那么怎么做到传递的是值类型数据,在被调函数的操作也会影响主函数变量的变化呢?例如①中去掉static,则在主函数将无法调用,这时应该创建该类的对象,用对象进行操作。//在主函数中,c必须赋予初始值,否则无法传递给形参。因为在被调函数中,c的值仍然可以使用。函数结构:访问修饰符+【静态修饰符(可有可无)】+返回值类型+(参数列表)函数:具备一定功能的可以复用的代码块。寻找一个数组的最大值与最小值。

2024-09-29 10:52:40 916

原创 Array类、引用类型

观察现象的到,把变量a赋给变量c,在对c进行更改,a的值仍然不变;而引用类型的传递造成地址共用了,无论是其中的谁改变,都会影响具有该地址的变量。前面我们对数组的增加,删除,查找,更改都需要进行循环遍历,非常的麻烦。这就是对于引用类型和值类型的一个重要区别,因为值类型变量他们的地址一般是不一样的。1.默认值不同,基本数据类型的默认值为其数据类型本身的默认值(如int为0,bool为false),引用数据类型的默认值为null。2.存储值不同,基本数据类型存储的是值本身,引用数据类型存储的是对象的地址。

2024-09-29 09:05:48 688

原创 数组、二维数组、交错数组

数组的声明和定义:int[] b=new int[3];元素初始化:int[,] c={{1,2},{3,4}};数组的直接赋值:int[] c=new int[3]{1,2,3};二维数组的初始化:int[,] b=new int[3,4];数组的定义:数组是存储相同数据元素的固定大小的有顺序的容器。3. 有顺序的,数组里的各个元素是有自己的位置的,从0开始。数组的简便定义:int[] d={1,2,3};数组的声明:int[] a;修改数据:对元素赋值;

2024-09-28 10:02:14 376

原创 异常处理、算术运算符、关系运算符、逻辑运算符

如果第一个操作数为 false,那么就不会再对第二个操作数进行判断,因为无论第二个操作数的值是什么,结果都为 false。如果第一个操作数为 true,那么就不会再对第二个操作数进行判断,因为无论第二个操作数的值是什么,结果都为 true。try{可能出现的错误}catch(){异常的处理}finally{无论对错都处理的程序,可有可无}结果为3,原因是除号的结果会向着分子分母中字节数大的转换,所以10/3的结果是3,省去了小数部分。2.复合运算符:+=、-=、/=、*=、%=

2024-09-26 20:03:27 323

原创 隐式转换、显示转化

其实我们主要注意显示转换后的结果对我们有没有影响就好了,不要轻易使用不知道结果的显示转换,看到有无法转换的错误,会有提示的,懂得修改就好了。隐式转换: 在c#语言中编译器会自动按照一定的规则进行数据类型的转换,将这种自动转换叫做隐式转换。中所有的类默认的父类或最终的类都是属于object类,即object类是一切类的祖宗,。显示转换:需要程序员手动进行数据类型转换的我们称之为显性转换。1.字节小的数据类型向字节大的数据类型的转换。1.字节大的数据类型向字节小的数据类型的转换。2.基类数据向派生类的转换。

2024-09-26 18:19:03 137

原创 数据进制、字符串、转义字符

Console.WriteLine(string.Format("我的名字是{0},地址是{1}",name,address));如果不加@\l和\c是识别不到的转义字符,需要原样输出。Console.WriteLine("我的名字是:"+name +","+"地址是:"+adress);Console.WriteLine($"我的名字是{name},地址是{address}");\' 单引号符 \'' 双引号符。\\ 反斜线符"\"

2024-09-26 16:32:23 309

原创 默认数据类型、标识符

这里的10系统默认分配是int类型的,但道理来说int转byte是不允许的。但是只要int的范围不超过byte的范围,上诉是不会报错的。(这个会报错)只要等式右边含有变量的运算,就不能自动大转小。标识符统一解释为只要是我们命名的都称之为标识符,例如空间名称、类名、函数方法名、变量名等。标识符的命名规则和C是一样的。然而无论是小转大还是大转小都不能自动转换,需要进行强制转换,在后面加f就代表转换为浮点型。下图是一张关于C#的关键字表,其实不用特别的记忆,凡是关键字在visual stadio都会高亮出来的。

2024-09-26 14:57:59 224

原创 数据存储、数据类型

byte(1字节)、ushort(2字节)、uint(4字节)、ulong(8字节)sbyte(1字节)、short(2字节)、int(4字节)、long(8字节)float(4字节)、double(8字节)、decimal(16字节)bool(1字节)类型存储的数据是ture或者false;查询数据类型的存储空间大小和存储范围的方法,以int为例;浮点数的数据范围是有特定的存法的,这里不用去管。//const+数据类型+名称=数据。//如果对b进行更改会报错的c。//数据类型+名称=数据。

2024-09-26 11:31:20 196

原创 输入、输出

/读取一个字符,返回值是ConsoleKeyInfo类型的。//换行输出,先输出在换行。//无换行输出,这一点可搭配下一句观看。//读取一行数据,是字符串的形式。

2024-09-26 10:45:37 214

原创 单片机学习之路(1)

Stm32f1主频是72Mhz,所以内存的处理能力是32/8(字节)*72=300MB/S的级别。flash的频率是24MHZ,所以是100MB/S的级别。"RAM"存储单元的内容可按照需要随机取出或存入,且存取的速度与存储单元的位置无关。在嵌入式系统和单片机中,闪存被广泛用于存储程序代码、配置信息、固件更新等。相当于计算机的硬盘。"FLASH" 通常指的是闪存,它是一种非易失性存储器,单片机有Cpu,flash,SRAM,和各种外设组成。,所以主要用于存储短时间使用的程序。相当于计算机的内存。

2024-09-18 20:28:17 265

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除