C# 学习笔记
C#基本结构
程序的执行从 Main 方法开始。
1 | using system //System 命名空间 |
基本语法:
1、标识符:
是用来识别类、变量、函数或任何其它用户定义的项目。标识符不能是关键字。
1 | public class test //test 是标识符.类 |
2、关键字:
C# 编译器预定义的保留字。这些关键字不能用作标识符。关键字注释参考:说明手册
3、数据类型:
值类型变量:
可以直接分配给一个值,属于在栈中开辟一个内存空间并存入值。常用值类型如下:
bool 布尔值 True 或 False
char 16 位 Unicode 字符
double 64 位双精度浮点型
float 32 位单精度浮点型
int 32 位有符号整数类型
引用类型:
不包含存储在变量中的实际数据,而是存入对变量堆中位置的的引用。
1、引用类型.对象(Object)类型
object obj;
obj = 100;
2、引用类型.动态(Dynamic)类型
dynamic &<&variable_name&>& = value;
dynamic d = 20;
3、引用类型.字符串(String)类型
String str = “runoob.com”;
命名空间:
namespace 命名空间(有点类似C的库)
类:
public class person //例如人类,
类语法:
类成员:字段(存数据private只能在当前类中访问);属性(保护字段);方法;构造函数(初始化)
属性结构:
1 | public int X |
调用当前对象内容:this.X:或this.int a
新建对象:
1 | person Leon=new person() //例如我(littleboy)这个人类的对象 |
常见常/变量
常量:
const int a
枚举:
[public] enum a { 内容1内容2 }
a X = a . 内容1
结构:
[public] struct 结构名 { public string _内容1 ; public int _内容2 }
结构名 X X._内容1 ; X._内容2
数组:
存储相同类型的变量,区别于结构(存储不同类型的变量)
值类型:
int、 double、char、bool、decimal、enum、struct。是栈类型:可以被赋值改变而释放(重用)内存
引用类型:
string、数组、自定义类、集合、object、接口。是堆类型,字符串(特殊)不可变性,被赋值改变是选择新开辟内存,并在栈中重新指向。不释放内存,卡由GC处理。
类型转换:
1、double a = 3.14;int b = (int)a // 数字转数字
2、int a = 3;double b = a // 数字转数字
3、double a = convert. todouble(str); // 字符串转数字,
封箱/拆箱:
封箱:是把值类型转换为引用类型(System.Object),或者转换为值类型实现的接口类型。
拆箱:是将引用类型转换为值类型。
运算符:
++,– (一元运算符)优先,且运算完返回变量。
+,-,*,/,% (二元运算符)
+=,-=,*=,/=,%= (二元运算符)缩写写法
(举例:)
1 | a++ |
逻辑符:
&&(且),需要同时满足;
||(或),需要满足其中一项;
!(非),对结果取反
逻辑符可以混搭和累加使用
常见语句结构:
1、 判断
if结构及延伸if结构(网站查)
switch 定值判断
2、 循环
for(,,)
foreach( var item of array[] )
while(1);需要有结束条件,不然就是死循环
do-while 先执行一遍do
3、 循环结构特殊判断:
break
Continue
4、 异常提醒:
try { 需要检查异常的语句 } catch { 提供提示语句,例如:console.writeline(“有错误,请检查”)}
三个参数:
1、 out****:
用于一个方法返回多个类型的值,
public static void 方法名(int[] a , out int b , out string c)
2、 ref****:
将参数代入方法,并且可以返回值。
[public] static 返回值类型 方法名(ref [参数列表])
方法名(ref [参数列表] )
3、 params****:
多用于数组的添加和减少
[public] static 返回值类型 方法名(params [参数列表]) 方法名( 无需跟格式 )
方法的重载:
同名不同类型,用一个名字的方法并列编写,只是参数不同。
方法的递归:
方法调用自己方法,
构造函数:
方便对象初始化
1 | pubilc 类名(int a,char b,string c) |
析构函数:
~类名()//当程序结束时 析构函数才执行。可用于释放资源,减少内存。
封装:
被定义为”把一个或多个项目封闭在一个物理的或者逻辑的包中”。在面向对象程序设计方法论中,封装是为了防止对实现细节的访问。C#中的访问修饰符:(能修饰类的修饰符只有两个:public、internal)
1 | public:公开 |
(来自“菜鸟教程”高赞比喻)
比如说:一个人A为父类,他的儿子B,妻子C,私生子D(注:D不在他家里)
如果我们给A的事情增加修饰符:
1 | public事件,地球人都知道,全公开 |
继承:
public 子类:父类
子类不调用父类的构造函数,但会默认调用父类的无参构造函数,
解决方法:1、父类写无参构造函数;2、用base(a,b,c)继承
多态:
让一个对象能表现多种状态(存在子类多态情况使用,表达子类不太的方法)
3个方法:
1、虚方法:“public virtual void 函数名()”将父类方法标记为虚方法加virtual,子类加override。作用是对象是谁就用谁的方法。
2、抽象类:“public abstract void 函数名()”当父类不知道如何实现方法时,可做为抽象类,函数写成抽象函数(是没有函数体的,没有大括号“{}”。所以函数不执行)。
3、接口:
集合:
ArrayList,用于泛型集合(长度可变)
HashList,键值对集合
dictionary ,字典集合
list 泛型:list
文件处理类,
Path 路径
Filestream文件流?
1 | using(filestream a=new filestream(@路径)) |
序列化&反序列化[serializable]:
对象<——>二进制转换
1 | using(filestream a=new filestream(@路径)) |
部分类/密封类:
部分类:public partial class 类名 {} 用于多人同写一个类,避免重名
密封类:public sealed class 类名 {} 用于避免被继承,但可以继承别人的类
接口:
1 | [ ],使用继承方式接口。 |
接口特点://不能实例化// 不允许写具体方法体函数//自动属性
显示实现接口:
其他知识点
COM
COM 技术概述 - Win32 apps | Microsoft Learn
\1. ref,需单独初始赋值
\2. 数组长度定义需新建对象:int[ ] x = new int[ 100]
\3. 静态类可以直接 类.方法名();
\4. \是转意符,@取消本行的\转意符作用)
//去除指定字符后的内容
string Name2 = “PART1 2022-41”;
Debug.WriteLine(Name2.Substring(0,Name2.LastIndexOf(‘-‘)));
返回:PART1 2022
算法使用
栈:
队列:
哈希表:
字典树:
LRU:
排序:
计算几何:
深度优先搜索(穷举):
贪心:
默认快捷键:
CTRL+k,c 注释选中行
CTRL+k,u 取消对选中行的注释
CTRL + SHIFT + B:生成解决方案
CTRL + F7 :生成编译
CTRL + SHIFT + O:打开项目
CTRL + SHIFT + C:显示类视图窗口
F1 :帮助
F4 :显示属性窗口
F5:开始调试,遇到断电停止
F9:设一个断点
F10:执行下一个函数
F11:执行下一个语句
F12 :转到定义
CTRL + F5:运行不调试
Shift+F11就会执行到当前函数末尾
F5就会执行到下一个断点
SHIFT + F4:显示项目属性窗口
CTRL + SHIFT + E:显示资源视图
CTRL + F12:转到声明
CTRL + ALT + J:对象浏览
CTRL + ALT + F1:帮助目录
CTRL + F1 :动态帮助
SHIFT + F1:当前窗口帮助
CTRL + ALT + F3:帮助-搜索
SHIFT + ALT + ENTER:全屏显示
CTRL + -:向后定位
CTRL + SHIFT + -:向前定位
CTRL + PAGE DOWN:光标定位到窗口上方
CTRL + PAGE UP:光标定位到窗口下方
CTRL + F6 :
CTRL + TAB:下一个文档窗口
CTRL + SHIFT + F6 :
CTRL + SHIFT + TAB:上一个文档窗口
ALT + F6:下一个面板窗口
CTRL + K, CTRL + L:取消remark
CTRL + K, CTRL + C:注释选择的代码
CTRL + K, CTRL + U:取消对选择代码的注释
CTRL + M, CTRL + O:折叠代码定义
CTRL + M, CTRL + L:展开代码定义
CTRL + DELETE:删除至词尾
CTRL + BACKSPACE:删除至词头
SHIFT + TAB:取消制表符
CTRL + U:转小写
CTRL + SHIFT + U:转大写
CTRL + SHIFT + END:选择至文档末尾
CTRL + SHIFT + HOME:选择至文档末尾开始
SHIFT + END:选择至行尾
SHIFT + HOME:选择至行开始处
SHIFT + ALT + END:垂直选择到最后尾
SHIFT + ALT + HOME:垂直选择到最前面
CTRL + A:全选 CTRL + W:选择当前单词
CTRL + SHIFT + PAGE UP:选择至本页前面
CTRL + SHIFT + PAGE DOWN:选择至本页后面
CTRL + END:文档定位到最后
CTRL + HOME:文档定位到最前
CTRL + G:转到…
CTRL + K, CTRL + P:上一个标签
CTRL + K, CTRL + N:下一个标签
ALT + F10:调试-ApplyCodeChanges
CTRL + ALT+ Break:停止调试
CTRL + SHIFT + F9 :取消所有断点
CTRL + F9:允许中断
CTRL + SHIFT + F5:调试-重新开始
CTRL + J:列出成员
CTRL + PAGE DOWN:下一个视图