C#图解教程(第四版)小笔记(总)

本文详细介绍了C#编程的基础知识,包括字符串格式说明符、var关键字、常量、参数传递机制、运算符优先级、引用类型比较、自定义转换、运算符重载等。还探讨了类与继承的概念,如抽象类、密封类、接口、异常处理、委托、事件、泛型等高级特性,深入讲解了堆和栈的区别以及内存管理。最后涉及了异步编程和元数据相关的反射与特性。
摘要由CSDN通过智能技术生成

基础

字符串格式说明符

字符串格式说明符:由索引号,对齐说明符、格式字段3个部分组成
在这里插入图片描述

  1. 索引号
    尝试引用超出替换值列表长度以外的索引时,不会产生编译错误,但会产生运行时错误(异常)
  2. 对齐说明符
    可选,+(默认,可不写)表示右对齐,-号表示左对齐
    整数表示使用字符的最少数量
  3. 格式字段
    在这里插入图片描述
    9个内置格式说明符:
    ■ C、c:货币,货币符号取决于程序所在PC的区域设置
    ■ D、d:十进制
    ■ F、f:定点
    ■ G、g:常规,在没有指定说明符的情况下,会根据值转换为定点或科学记数法表示的紧凑形式
    ■ X、x:十六进制
    ■ N、n:数字,每三个数字间有逗号(或空格,取决于PC定位)分开,b, m, k;精度是小数位数
    ■ P、p:百分比,数字乘以100后添加%表示,精度为小数位数
    ■ R、r:往返过程(复杂,不想看)
    ■ E、e:科学计数法,精度为小数位数

var关键字

在这里插入图片描述

常量const

必须有初始化语句,初始化值需要在编译时决定,不能是某对象的引用,因为对象的引用是在运行时决定的
const不是一个修饰符,而是核心声明的一部分,需要放在类型的前面。
本地常量声明在方法体或代码块里,并在声明它的块结束的地方失效。
在这里插入图片描述

参数传递机制

形参是本地变量。
实参必须与对应形参类型匹配,或是编译器能把实参隐式转换为形参的类型。

  1. 值参数
    通过将实参的值复制到形参的方式,把数据传递给方法。
    方法被调用时,系统操作:
    ①在中为形参分配空间
    ②将实参的值赋给形参
    说明:引用类型复制的是栈中存放的引用,所以在方法内操作形参时,改变了引用指向的数据,故影响到了实参的值。
  2. 引用参数 ref
    实参必须是变量,且在用作实参前必须被赋值。
    声明和调用都要ref关键字
    方法被调用前,系统操作:
    不为形参在栈上分配内存,而是将形参用作实参的别名,指向相同的内存位置
    在这里插入图片描述
static void SimpleFunc(MyClass f1)
{
   
	f1.val = 50;
	f1 = new MyClass();
}

static void RefFunc(ref MyClass f1)
{
   
	f1.val = 50;
	f1 = new MyClass();
}

static void Main()
{
   
	MyClass a1 = new MyClass();
	SimpleFunc(f1);
	RefFunc(ref f1);
}

在这里插入图片描述

  1. 输出参数 out
    声明和调用都需要out关键字
    形参相当于实参的别名,在方法内部,输出参数在能够被读取之前必须被赋值。
  2. 参数数组 params
    一个参数列表中只能有一个参数数组,且必须是最后一个。
    声明:在数据类型前使用params修饰符,后放置一组空的方括号
    在这里插入图片描述
    在使用一个为参数数组分离实参的调用时,编译器的行为:
    · 接受实参列表,用它们在堆中创建并初始化一个数组
    · 把数组的引用保存到栈中的形参里
    · 如果在对应形参数组的位置没有实参,编译器会创建一个有零个元素的数组来使用
    如果数组参数是值类型,值被复制,实参不受影响;
    如果数组参数是引用类型,引用被复制,实参引用的对象可以被影响。
    在这里插入图片描述
  • 附:可选参数
    位置介于非可选参数和数组参数之间
    在这里插入图片描述

方法的签名

组成:
■ 方法的名称
■ 参数的数目
■ 参数的数据类型和顺序
■ 参数修饰符
在这里插入图片描述

字面量

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
编译器让相同的字符串字面量共享同一内存位置以节约内存。
逐字字面量:@开头
转义字符不会被求值;相邻的双引号被解释为单个双引号

运算符及优先级

在这里插入图片描述
在这里插入图片描述

引用类型的比较

浅比较:大多数引用在比较相等性时,只比较它们的引用(指向的内存地址)是否相等。
在这里插入图片描述
深比较:string类型的对象,将比较它们的长度和内容(区分大小写)是否均相等。

自定义显式转换和隐式转换

隐式转换:implicit
在这里插入图片描述
显式转换:explicit(类似隐式,只需把implicit换成explicit)
约束:
不能重定义标准隐式转换或显示转换
对于源类型S和目标类型T:
■ S和T必须是不同类型
■ S和T不能有继承关系
■ 都不能是接口或object
■ 转换运算符必须是S或T的成员

运算符重载 operator关键字

只能用于类或结构
必须同时使用static和public修饰符
一元运算符重载带一个单独的class或struct类型参数
二元运算符重载带两个参数,且至少带一个class或struct类型的参数
在这里插入图片描述
在这里插入图片描述
递增和递减运算符重载后前置和后置之间没有区别。

switch-case

在这里插入图片描述

using语句,及时释放或关闭资源

分配资源(类、接口等)要求实现IDisposable接口
形式一
在这里插入图片描述
形式二:
在这里插入图片描述
在这里插入图片描述

可空类型 Nullable<T>、T?

在这里插入图片描述
在这里插入图片描述
判断可空类型是否有值:
①与null比较②获取hasValue属性

自定义可空类型

可空结构体:可空结构体只通过Value属性暴露基础类型,不直接暴露任何成员(though public)。
在这里插入图片描述

Main方法

四种声明形式:

// type 1:无返回值,无参数。
static void Main(){
   }
// type2:无返回值,可以有参数。参数可以为0~n个,空格或制表符隔开。若无传参则args为空数组
static void Main(string[] args){
   }
//type3:有返回值,无参数。返回值通常用于报告程序执行成功或失败,0通常表示成功
static int Main(){
   }
//type 4:有返回值,可以有参数
static int Main(string[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值