C#从入门到精通(第四版)学习记录-- 第1章-第4章

第一章 初识C#及其开发环境

1.1 C#概述

1.1.1 C#语言及其特点

  1. C#是微软公司设计的一种编程语言,是从C和C++派生来的,可以和.NET框架完美结合;
  2. C#不允许直接操作内存,去掉了指针操作;
  3. 面向对象设计,支持封装、继承和多态;
  4. 与Web紧密结合,支持绝大多数的Web标准,如HTML、XML、SOAP等;

1.1.2 .Net Framework

  1. Net Framework是微软推出的完全面向对象的软件与运行平台,主要有两个主要组件:公共语言运行时(CLR)和类库
  2. CLR负责管理和执行由.NET编译器产生的中间语言代码,解决了很多传统编译语言的一些致命缺点,如垃圾回收(GC)、安全检查等;
  3. 类库:类的仓库;
    .NET程序执行原理:
    在这里插入图片描述

1.1.3 C#与.NET框架

  1. .NET框架是微软公司推出的一个全新的编程平台
  2. C#是专门与微软公司的.NET FrameWork一起使用而设计的
  3. .NET FrameWork是一个功能丰富的平台,可开发、部署和执行分布式应用程序
  4. C#只是一种语言,用于生成面向.NET环境的代码,但不是.NET的一部分
  5. .NET支持的一部分特性,C#并不支持;而C#支持的一些特性,.NET却不支持(如运算符重载)

第二章 开始C#之旅

2.2.3 Main方法

  • C#中所有的Main方法都必须是静态的。因为程序启动时还没有创建类的对象,静态时可以不依赖于类的实例对象而执行;
  • C#是一种面向对象的编程语言,即使是程序的入口点,也是一个类的成员;
  • public:说明Main方法是共有的,在类的外面也可以调用整个方法;
  • static: 说明方法是一个静态的,即这个方法属于类的本身而不是这个类的特定对象。调用静态方法不能使用类的实例化对象,必须直接使用类名来调用

2.3 编码规范

2.3.1 代码书写规则

  • 尽量使用接口,然后使用类实现接口,以提高程序的灵活性
  • 尽量不要手工更改计算机生成的代码,若必须更改,一定要保持一样的风格
  • 关键的语句、关键变量必须写注释
  • 建议局部变量再最接近使用它的释放声明,即就近原则声明
  • 不要使用goto系列语句,除非是用在跳出深层循环时
  • 避免写超过5个参数的方法,可用结构体
  • 避免书写代码量过大的try-catch模块
  • 避免在同一个文件中放置多个类
  • 生成和构建一个长的字符串时,一定要使用StringBuilder类型,而不用string类
  • Switch语句一定要有default语句来处理意外情况
  • 对于if语句,最好用{}包起来
  • 尽量不适用this关键字
  • 建议定义变量时对其初始化
  • 推荐使用指定可访问性修饰符,如推荐 private const string _name = "UT"; 不推荐 const string _name = "UT";
  • 推荐使用括号来声明算术运算符,如 var v = a + (b * c);
  • 推荐使用包含专用支持私有字段的属性,而不是自动属性,不推荐private int Age { get; }
//C#7.0版本前推荐
private int _age;
public int Age{ get { return _age;}}
//C#7.0以上版本推荐
private int _age;
public int Age { get => _age;}
  • 推荐使用复合赋值表达式,如x += 1;
  • 获取非null变量时,推荐合并表达式而不是三元运算符检查,推荐var v = x ?? y; 而不是var v = ( x != null ) ? x : y;
  • 声明 int 等内置系统类型的变量及表达式右侧已知类型时推荐使用var,如: var x = 5; var obj = new MyClass();
  • C# 7.0 以上版本,推荐使用 =>,如public int Age => _age;
  • C# 8.0 以上版本,推荐使用^,取反,如string[] _names = { "Li", "Zhang"}; var index = _names [^1]; ,取数组中最后一个内容
  • C# 8.0 以上版本,推荐使用..,范围内的内容获取,private const string _myName = "Json Q K"; var _name = _myName [0..^4]; 取字符串从0开始到倒数第四个字符间的字符串;若之前版本,可用var _name =_myName .Substring(0, _myName .Length - 4);

2.3.2 命名规范

  • 帕斯卡命名法(PascalCasing):第一个字母必须大写,并且后面的连接词的第一个字母均为大写 ,如MyName,适用于所有公共成员/常量、委托、事件、方法、类、接口、结构体、枚举和命名空间、属性;
  • 驼峰命名法(camelCasing):第一个字母必须小写,并且后面的连接词的第一个字母均为大写 ,如myName,适用于参数,私有字段、局部变量。
  • 所有的成员变量前加前缀“_” ;
  • 接口的名称加前缀”I”;
  • 方法的命名,一般将其命名为动宾短语,如CreatFile;
  • 所有的成员变量声明在类的顶端,用一个换行把它和方法分开
  • 用有意义的名字命名空间namspace,如公司名、产品名;;
  • 使用某个控件的值时,尽量命名局部变量

第三章 变量与常量

3.3 数据类型

  • C#中的变量根据其定义可以分为两种:值类型引用类型
  • 存储方式不同,值类型的变量本身直接存储数据;引用类型存储实际数据的引用,程序通过此引用找到真正的数据。
  • 值类型主要包含:整数、浮点、布尔类型等,在栈中分配,效率高,使用值类型主要目的是为了可以提高性能。
  • 引用类型是构建C#应用程序的主要对象类型数据。预先定义的对象类型以new创建实例,存储在堆中。

3.3.1 值类型

  • 值类型变量存储在栈中; 访问值类型变量时,一般都是直接访问其实例;
  • 每个值类型变量都有自己的数据副本,因此对一个值类型变量的操作不会影响其他变量; 复制值类型变量时,复制的是变量的值,而不是其地址;
  • 值类型变量不能为null,必须具有一个确定的值; 值类型是从System.ValueType类继承来的类型;
  • 整形和浮点类型默认初始值0,布尔类型默认初始化false
  • 整数类型,C#程序中有3种表示形式:十进制、八进制、十六制
    在这里插入图片描述
  • byte无符号的一个字节,相当于C++中的char
  • sbyte有符号的字节,相当于C++中的unsign char
  • 注意:十进制不能以0开头,八进制必须以0开始(0123相当于十进制的83),十六进制必须以0X或0x开头
  • 浮点类型:主要包含float和double两种,默认double类型
    在这里插入图片描述
  • 注意:浮点数后面指定F或f是声明float类型(0.2f),不指定或指定d或D是double类型;double类型的值前面加上(float)可以强制转换为float
  • 布尔类型:只有true和false,不能和其他类型转换和赋值,C++可以和int转换
  • 枚举类型:是一种独特的值类型,若不对其赋值,默认第一个枚举数的值为0,后面每个枚举竖的值依次递增1

3.3.2 引用类型

  • 必须在托管堆中为引用类型变量分配内存;
  • 使用new关键字来创建引用类型变量;
  • 在托管堆中分配的每个对象都有与之相关联的附加成员,这些成员必须被初始化
  • 引用类型变量时由垃圾回收机制来管理的;
  • 多个引用类型变量可以引用同一个对象,此情况下,对一个变量的操作会影响另一个变量所引用的统一对象;
  • 引用类型被赋值前值都是null;
  • 所有被称为”类”的都是引用类型,包括类、接口、数组、委托等;

3.3.3 值类型与引用类型的区别

  • 概念上,值类型直接存储其值(现金),而引用类型存储其值的引用(存折);
  • 内存空间上,值类型在栈中操作,而引用类型在堆中分配存储单元;
  • 栈在编译时就分配好了内存空间
  • 堆是在程序运行中动态分配的内存空间
  • 值类型在内存中占用一个预定义的字节数,而引用类型的变量在堆中分配一个内存空间,这个内存空间包含的是对另一个内存
    置的引用,这个位置是托管堆中的一个地址,即存放此变量实际值的地方;
  • C#的所有值类型均隐式派生自System.ValueType,而System.ValueType直接派生于System.Object。即System.ValueType本身是一个类的类型,而不是值类型;

3.3.5 类型转换

  • 隐式转换:不需要声明就能进行的转换。转换时编译器不需要进行检查就能自动进行转换
    在这里插入图片描述
  • 显示转换:也叫强制转换。需要明确的声明才能转换类型,如高精度转换为低精度可在之前加(转换的类型),如int I = (int)12.2 或用Convert类进行转换
    在这里插入图片描述
  • 装箱和拆箱
    装箱:将值类型转换为引用类型的过程;
    拆箱:将引用类型转换为值类型的过程;

第四章 表达式与运算符

4.2 运算符

4.2.1 算数运算符

在这里插入图片描述

int I1 = 22, I2 = 23, I3;
I3 = I1 % I2;      //取余数
Math.DivRem(I1,I2,out I3);   //取余数

4.2.2赋值运算符

在这里插入图片描述

4.2.3关系运算符

在这里插入图片描述

4.2.4 逻辑运算符

在这里插入图片描述

  • 逻辑运算符“&&”与“&”都表示”逻辑与“,区别:
  1. 逻辑运算符“&”会判断两个表达式;
  2. 逻辑运算符“&&”是针对bool类型的类进行判断,当第一个表达式为false时则不去判断第二个表达式,直接输出结果从而节省计算机判断的次数;

4.2.5 位运算

  1. ”按位与”&:
  2. ”按位或”|”:
  3. ”按位取反”^”:
  4. 移位操作:左移<< 右移>>

4.2.6 其他运算符

  • is运算符 :用于检查变量是否时指定的类型,若是返回true,否则返回false。如:
int = 2;   bool _result = i is int;            //判断i是否是整形

注意:不能重载is运算符,只考虑引用转换、装箱转换和取消装箱转换。不考虑其他转换,如用户定义的转换。

  • 条件运算符 : 条件式 ?值1 : 值2
  • new 运算符:用于创建一个新的类型实例,有3种形式:
    对象创建表达式,用于创建一个类类型或值类型的实例
    数组创建表达式,用于创建一个数组类型的实例
    代表创建表达式,用于创建一个新的代表类型的实例
  • typeof运算符:获取系统原型对象的类型,也就是Type对象。Type类包含关于值类型和引用类型的信息。如:
Type mytype = typeof(int);          //System.Int32

4.3运算符优先级

在这里插入图片描述

  • 如果两个运算符有相同的优先级,那么左边的表达式要比右边的表达式先被处理。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qzy0621

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值