寒假学习日志(2)

目录

  • 前言
  • 学习笔记
    • 第一章
        • 1.变量操作
        • 2.方法和作用域
        • 3.判断语句
        • 4.循环语句
        • 5.管理错误和异常
    • 第二章
        • 1.类和对象
        • 2.值和引用
        • 3.枚举和结构
        • 4.数组
        • 5.参数数组
        • 6.继承
        • 7.接口
  • 总结

前言

寒假学习日志(2)_第1张图片

这一周主要攻克C#。学习主要参考《Visual C#从入门到精通(第9版)》的第一章与第四章。以下为一些个人的学习笔记,着重记录开发上位机时可能会用到的一些知识。
----------------------------------------------------1/17(1/29补全)


学习笔记

第一章

1.变量操作

C#的.Net Framework中变量转换有专门方法,如To方法,Convert方法,Parse方法
$"{■} + {■}",$后面的{}中的表达式会自动求值
书上推荐使用C#特有的字符串插值,但个人认为编写小型程序用"+","+="处理字符串更方便
C#允许float和double取模操作,太强了
"++■"和"■++"区别在返回值,单独使用时统一使用后缀形式
C#可以用"var ■"声明隐式类型的局部变量,比较灵活但尽量少用

2.方法和作用域

C#不支持全局方法,方法必须要在类的内部
第一个学习的语法糖:用“方法声明=>表达式”来创造方法
方法可以返回多个值,用法如用(int, int)声明,return(■,■),用一样写法的变量列表来容纳结果
在一个类中,方法外的变量可视为类内的全局变量,并且可以声明在方法后
重载,永远的神!终于不用再写一堆if判断参数数据类型了T_T
可以利用":"传递具名参数,允许实参按任意顺序传递

3.判断语句

C#中if只认识布尔表达式
switch中可用case(■)完成表达式的判断
switch中若无case匹配,进入default:;default可以随意摆放
switch中case标签必须唯一
switch可以连写case

4.循环语句

C的循环语句一脉相承

5.管理错误和异常

try块后只运行第一个catch到的错误,故应将较具体的catch程序放在前面
checked中任何整数运算溢出都抛出OverflowException异常,unchecked中所有整数运算都不检查;checked不会检查调用方法内的整数运算的异常
throw语句抛出一个异常对象,常用new新建一个对象
语法糖 “条件 ? 第一个表达式 : 第二个表达式” 等价于if...else...
在try后面使用finally,以确保try——catch中间的代码一定会运行

第二章

1.类和对象

给类的实例赋值时需注意:直接赋值要用new初始化,用其他类的实例”赋值“时可不用new初始化。此处”赋值“本质应为引用
尽量做到:公共标识符首字母大写,非公共标识符(包括局部变量)以小写字母开头
重载构造器:构造器作为类的一种可以重载,以便应付不同的初始化要求。一旦手动写了构造器,C#的默认t器就不再自动生成
静态:static修饰的成员即静态成员,其最重要的特性是先于对象存在,以便在没有实例对象时可以调用。static修饰的成员在类被加载的时候便存在。外部可以不用new一个实例对象分配空间来调用,可以直接访问static的成员
静态特点:因为可能没有实例static修饰的成员内不能再有this了,static修饰的成员也只能访问static修饰的成员
私有:所谓私有是类级别上的私有,所以同一个类的两个实例能相互访问私有数据。所以可以出现“int xDiff = this.x - other.x;"这样的代码,其中other是另一个相同类的实例
解构器:public void Deconstruct(out ■),向out修饰的变量赋值就会将这些值传回调用者,用于获取对象中字段的值
静态using语句:不同于动态成员有实例不加this可能不会错,任何时候调用静态成员都必须指定类命。用静态using语句省略类名
匿名类:类的类型要机器判断,var的作用出现在这里

2.值和引用

null的应用:所有变量尽量在声明时就初始化。假若不用创造真的实例,可以用null值赋给变量,表明该变量不引用内存中的任何对象
空条件操作符:■?.■,为空则不调用“.”后的代码
可空类型:int? i = null,
判断可空类型是否为空:if (!i.Hasvalue)...可见Hasvalue是个布尔类型属性
ref:在 定义方法参数 和 使用方法 时在参数前加ref从而能够通过一个方法影响另一个方法的实参
out:若要ref的参数未赋值,则使用out,使用out时引用参数的方法中必须对参数赋值
栈与堆:实参、类的地址等多放在栈中,而类的实例多放在堆中(new关键字)
所有类都是System.Object或object类的派生类
拆箱与装箱:利用object类传递栈与堆中的数据,不如用泛型
数据的安全转型:if(■is■)或者如WrappedInt temp = o as WrappedInt,is和as两种关键字
switch功能拓展:可利用swtch判断类的类型
C#中unsafe标记代码块后就可以使用指针了

3.枚举和结构

枚举元素从1开始
结构储存栈中,比起类在更小的数据量情况下更优。如果一个概念的重点在值而非功能,就用结构体
结构可以写自己的构造器。自己的构造器必须对所有字段显式赋值,默认构造器会赋值为0,false或null
C#中结构的赋值不可人为干预!

4.数组

创建数组:C#的数组创建时类似类的创建,即先声明变量名,再用new创建实例
遍历数组:foreach(遍历变量声明 in 数组名)  语法糖真甜!
数组的复制:由于C#数组和类相似,"="是引用的意思,要复制数组C#提供了CopyTo、Copy和Clone方法

5.参数数组

有点难,用不上,跳了

6.继承

所有的派生类都会自动调用基类构造器。假若基类默认构造器并非public,那么要手动调用public的基类构造器
虚方法和重写方法:用virtual和override声明多态性方法,类似于调整方法的优先级

7.接口

接口的理解:有点像虚方法和参数数组的思想,即针对不同的对象制定不同的方法达成目的。接口的对象可以是几乎所有东西
接口不含数据,不能添加字段
实现接口的方法必须是public,接口中的方法只是声明,不允许指定任何访问修饰符
可以通过is判断接口类型是否正确,并在判断后实现接口变量的赋值
显式实现接口如:"int ILandBound.NumberOfLegs()",此时能区分哪个方法实现哪个接口
显式接口的访问法:“接口实例字段.接口方法字段()”
interface:引入方法名称;virtual:该方法最初实现方式:override:重写该方法实现方法;sealed:该方法不可再被重写
抽象类:"abstract class ■" 不能创建该类的实例。
抽象方法:抽象类可包含abstract前缀的抽象方法,抽象方法必须public,派生类必须重写抽象方法

总结

  • 掌握markdown的基本用法
  • 掌握Git和GitHub的基本用法
  • 学会使用C#制作简单上位机
  • 协同小组成员完成平衡车项目
  • 五十音图

摸鱼太多了,下周一定好好学习,一定!寒假学习日志(2)_第2张图片
单词进度已经几乎归零了T_T,@某位同学我认输了,咱们不比了好不好啊T_T

你可能感兴趣的:(个人学习日志,c#)