C#重要知识归纳总结

C#教程

C# 结构体(Struct) | 菜鸟教程C# 结构体(Struct) 在 C# 中,结构体(struct)是一种值类型(value type),用于组织和存储相关数据。 在 C# 中,结构体是值类型数据结构,这样使得一个单一变量可以存储各种数据类型的相关数据。 struct 关键字用于创建结构体。 结构体是用来代表一个记录,假设您想跟踪图书馆中书的动态,您可能想跟踪每本书的以下属性: Title Author Subject Book ID 定义结构体 为了定义一..icon-default.png?t=N7T8https://www.runoob.com/csharp/csharp-struct.html

C#常用的快捷键

对齐代码:ctrl+k+d 注意代码不能出现语法错误

弹出智能提示:ctrl+j

光标最前/最后切换选中状态:shift+end;shift+home 上/下

注释选中代码:ctrl+k+c

取消注释选中代码:ctrl+k+u

折叠冗余代码:#region 后面写说明 #endregion

查看源代码:F12

高亮查询:ctrl+shift+上/下

查看方法都在哪使用了:shift+F12

一次修改多个变量的名称:F2

构建代码:F6

运行代码:F5

逐行调试:F10

逐过程调试:F11(可以进入方法体)

移动代码:alt+上/下

多行修改:alt+鼠标拖动

删除整行:shift+del

选中部分代码自动生成方法:ctrl+R+M

快速生成构造函数:ctor tab

快速引入命名空间:alt+shift+F10

ctrl+R+G清理未使用的命名空间

ctrl+L 删除整行代码

region的用法:

选中想要折叠的代码,ctrl+K+S

值类型和引用类型区别

值类型:int、double、bool、char、decimal、struct、enum

引用类型:string(不可变)、自定义类、数组

存储:

值类型的值是存储在内存的栈当中。

引用类型的值是存储在内存的堆中。

字符串的使用

  • 可以将string类型,看做是char类型的一个只读数组,如str[索引]值为一个字符类型
  • 字符串转字符数组:char[] chs = str.ToCharArray();
  • 字符数组转字符串:string str=new string(chs);
  • 比较2个字符串(可忽略大小写):str1.Equals(str2,StringComparison.OrdinalIgnoreCase);
  • 分割字符串(返回字符串类型的数组):str.Splite(字符数组,StringSplitOptions.RemoveEmptyEntries);//第二个参数可以去除空格字符串数组
  • 截取指定字符串:str.Substring(index,要截取的个数);
  • 判断字符串出现的位置:str.IndexOf();
  • 判断字符串以....开始:str.StartsWith();
  • 替换字符串:str.Replace(old,new);
  • 去除前后空格:str.Trim();
  • 去除开始/结束空格:str.TrimStart()/str.TrimEnd();
  • 判断是否包含某个字符串:str.Contains();
  • string.IsNullOrEmpty():判断一个字符串是否为空或者为null
  • string.Join("连接符字符串",数组):将数组按照指定的字符串连接,返回一个字符串。

string类型的常用方法

ToCharArray()——将字符串转换为char数组

new string(char[] chs)——能够将char数组转换为字符串

Length——获得当前字符串中字符的个数

ToUpper()——将字符转换成大写形式

ToLower()——将字符串转换成小写形式

Equals(lessonTwo,StringComparison.OrdinalIgnoreCase)——比较两个字符串,可以忽略大小写

Split()——分割字符串,返回字符串类型的数组。

Substring()——解决字符串。在截取的时候包含要截取的那个位置。

IndexOf()——判断某个字符串在字符串中第一次出现的位置,如果没有返回-1、值类型和引用类型在内存上存储的地方不一样。

LastIndexOf()——判断某个字符串在字符串中最后一次出现的位置,如果没有同样返回-1

StartsWith()——判断以....开始

EndsWith()——判断以...结束

Replace(old,new)——将字符串中某个字符串替换成一个新的字符串

Contains()——判断某个字符串是否包含指定的字符串

Trim()——去掉字符串中前后的空格

TrimEnd()——去掉字符串中结尾的空格

TrimStart()——去掉字符串中前面的空格

string.IsNullOrEmpty()——判断一个字符串是否为空或者为null

string.Join()——将数组按照指定的字符串连接,返回一个字符串。

字节数组---字符串

Encoding.Default.GetString(字节数组)

字符串--->字节数组

Encoding.Default.GetBytes(字符串)

ArrayList

类似于数组,为可变长度的存储空间,可以存放任意类型的数据

用法:

ArrayList list = new ArrayList();

list.Count //长度

list.Add(数据);//添加数据

list.AddRange(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 });//把1,2...数据依次添加

list.AddRange(list);//把list里面的数据依次添加

list.Clear();//清空所有元素

list.Remove(数据);//删除单个元素 写谁就删谁

list.RemoveAt(索引);//根据下标去删除元素

list.RemoveRange(index, count);//根据下标去移除一定范围的元素

list.Sort();//升序排列

list.Reverse();//反转

list.Insert(index, "插入的");//在指定的位置插入一个元素

list.InsertRange(0, new string[] { "张三", "李四" });//在指定的位置插入一个集合

list.Contains(元素);//判断是否包含某个指定的元素

装箱、拆箱的概念

装箱:就是将值类型转换为引用类型。

拆箱:将引用类型转换为值类型。

看两种类型是否发生了装箱或者拆箱,要看,这两种类型是否存在继承关系

注意:使用泛型集合而不使用ArrayList集合的目的是防止拆装箱。

Path类的用法

获得文件名:Path.GetFileName(str);获得文件名但是不包含扩展名:Path.GetFileNameWithoutExtension(str);获得文件的扩展名:Path.GetExtension(str);获得文件所在的文件夹的名称:Path.GetDirectoryName(str);获得文件所在的全路径:Path.GetFullPath(str);连接两个字符串作为路径:Path.Combine(@"c:\a" , "b.txt");

File类的用法

创建一个文件:File.Create(@"C:\Users\SpringRain\Desktop\new.txt");删除一个文件:File.Delete(@"C:\Users\SpringRain\Desktop\new.txt");

复制一个文件:File.Copy(@"C:\Users\SpringRain\Desktop\code.txt", @"C:\Users\SpringRain\Desktop\new.txt");

剪切一个文件:File.Move(@"C:\Users\SpringRain\Desktop\code.txt", @"C:\Users\SpringRain\Desktop\newnew.txt");

用File类操作文件的数据

      //将文件读取到字节数组中 byte[] buffer = File.ReadAllBytes(@"C:\Users\SpringRain\Desktop\1.txt");//将字节数组转换成字符串string s = Encoding.UTF8.GetString(buffer);//将字符串写入到指定文件中string s="今天天气好晴朗,处处好风光";//将字符串转换成字节数组byte[] buffer=  Encoding.Default.GetBytes(s);File.WriteAllBytes(@"C:\Users\SpringRain\Desktop\1.txt", buffer);//一行一行读取string[] contents = File.ReadAllLines(@"C:\Users\SpringRain\Desktop\抽象类特点.txt", Encoding.Default);foreach (string item in contents){Console.WriteLine(item);}//直接读取所有string str = File.ReadAllText("抽象类特点.txt", Encoding.Default);//一行一行写入File.WriteAllLines(@"C:\Users\SpringRain\Desktop\new.txt", new string[] { "aoe", "ewu" });//a直接全部写入File.WriteAllText(@"C:\Users\SpringRain\Desktop\new.txt", "张三李四王五赵六");//不发生覆盖的写入  File.AppendAllText(@"C:\Users\SpringRain\Desktop\new.txt", "看我有木有把你覆盖掉");

List的使用

用法与ArrayList类似可以ToArray(),ToList()使泛型集合与数组相互转换

Dictionary

使用方式与HashTable类似

        Dictionary<int, string> dic = new Dictionary<int, string>();dic.Add(1, "张三");dic.Add(2, "李四");dic.Add(3, "王五");dic[1] = "新来的";foreach (KeyValuePair<int,string> kv in dic){Console.WriteLine("{0}---{1}",kv.Key,kv.Value);}foreach (var item in dic.Keys){Console.WriteLine("{0}---{1}",item,dic[item]);}

文件IO流的实例代码

        //使用FileStream来读取数据FileStream fsRead = new FileStream(@"C:\Users\SpringRain\Desktop\new.txt", FileMode.OpenOrCreate, FileAccess.Read);byte[] buffer = new byte[1024 * 1024 * 5];//3.8M  5M//返回本次实际读取到的有效字节数int r = fsRead.Read(buffer, 0, buffer.Length);//将字节数组中每一个元素按照指定的编码格式解码成字符串string s = Encoding.UTF8.GetString(buffer, 0, r);//关闭流fsRead.Close();//释放流所占用的资源fsRead.Dispose();Console.WriteLine(s);Console.ReadKey();//使用FileStream来写入数据//using (FileStream fsWrite = new FileStream(@"C:\Users\SpringRain\Desktop\new.txt", FileMode.OpenOrCreate, FileAccess.Write))//{//    string str = "看我游牧又把你覆盖掉";//    byte[] buffer = Encoding.UTF8.GetBytes(str);//    fsWrite.Write(buffer, 0, buffer.Length);//}//Console.WriteLine("写入OK");//Console.ReadKey();

IO流复制大文件的实例代码

注意:将创建文件流对象的过程写在using当中,会自动的帮助我们释放流所占用的资源。

        //1、我们创建一个负责读取的流using (FileStream fsRead = new FileStream(soucre, FileMode.Open, FileAccess.Read)){//2、创建一个负责写入的流using (FileStream fsWrite = new FileStream(target, FileMode.OpenOrCreate, FileAccess.Write)){byte[] buffer = new byte[1024 * 1024 * 5];//因为文件可能会比较大,所以我们在读取的时候 应该通过一个循环去读取while (true){//返回本次读取实际读取到的字节数int r = fsRead.Read(buffer, 0, buffer.Length);//如果返回一个0,也就意味什么都没有读取到,读取完了if (r == 0){break;}fsWrite.Write(buffer, 0, r);}              }}

使用IO流操作文本文件实例

        使用StreamReader来读取一个文本文件using (StreamReader sr = new StreamReader(@"C:\Users\SpringRain\Desktop\抽象类特点.txt",Encoding.Default)){while (!sr.EndOfStream){Console.WriteLine(sr.ReadLine());}}//使用StreamWriter来写入一个文本文件using (StreamWriter sw = new StreamWriter(@"C:\Users\SpringRain\Desktop\newnew.txt",true))//true为不覆盖{sw.Write("看我有木有把你覆盖掉");}

如何遍历一个文件夹的目录

    //封装一个遍历文件夹目录大方法public void GetAllFiles(string path){var dir=new DirectoryInfo(path);foreach(var file in dir.GetFiles())  //GetFiles()获得所有文件对象{Console.WriteLine("文件名:{0}",file.Name);}foreach(var directory in dir.GetDirectories())  //GetDirectories获得所有文件夹对象{Console.WriteLine("文件夹名:{0}",directory.Name);this.GetAllFiles(directory.FullName);}}

移动文件夹需要如何异常处理

    public void MoveFile(string sourceFilePath,string destinationFilePath){var temp=Path.GetTempFileName();File.Copy(destinationFilePath,temp);try{File.Move(sourceFilePath,destinationFilePath);}catch (Exception){File.Copy(temp,sourceFilePath);throw;}}

抽象类的介绍

1.抽象成员必须标记为abstract,并且不能有任何实现。

2.抽象成员必须在抽象类中。

3.抽象类不能被实例化

4.子类继承抽象类后,必须把父类中的所有抽象成员都重写。(除非子类也是一个抽象类,则可以不重写)

5.抽象成员的访问修饰符不能是private

6.在抽象类中可以包含实例成员。并且抽象类的实例成员可以不被子类实现

7.抽象类是有构造函数的。虽然不能被实例化。

8.如果父类的抽象方法中有参数,那么。继承这个抽象父类的子类在重写父类的方法的时候必须传入对应的参数。

如果抽象父类的抽象方法中有返回值,那么子类在重写这个抽象方法的时候 也必须要传入返回值。

注意:如果父类中的方法有默认的实现,并且父类需要被实例化,这时可以考虑将父类定义成一个普通类,用虚方法来实现多态。如果父类中的方法没有默认实现,父类也不需要被实例化,则可以将该类定义为抽象类。

实现多态的手段

虚方法:将父类的方法标记为虚方法 ,使用关键字 virtual,这个函数可以被子类重新写一个遍。

抽象类:当父类中的方法不知道如何去实现的时候,可以考虑将父类写成抽象类,将方法写成抽象方法。

c#中的访问修饰符

public :公开的公共的

private:私有的,只能在当前类的内部访问

protected:受保护的,只能在当前类的内部以及该类的子类中访问。

internal:只能在当前项目中访问。在同一个项目中,internal和public的权限是一样。protected internal:protected+internal

注意:1)、能够修饰类的访问修饰符只有两个:public、internal。

2)、子类的访问权限不能高于父类的访问权限,会暴漏父类的成员。

Directory类的使用

用于操作文件夹

创建文件夹:Directory.CreateDirectory(@"C:\a");

删除文件夹:Directory.Delete(@"C:\a",true); //true里面有内容也可以删除,否则会抛出异常

剪切文件夹:Directory.Move(@"c:\a", @"C:\Users\SpringRain\Desktop\new");

获得指定文件夹下所有文件的全路径:string[] path = Directory.GetFiles(@"C:\Users\SpringRain\Desktop\Picture","*.jpg"); //第二个参数可以过滤文件

获得指定目录下所有文件夹的全路径:string[] path = Directory.GetDirectories(@"C:\Users\SpringRain\Desktop\new");

判断指定的文件夹是否存在:Directory.Exists(@"C:\a\b");

接口的基本概念

1.只要一个类继承了一个接口(包括抽象类),这个类就必须实现这个接口中所有的成员

2.接口不能被实例化。也就是说,接口不能new(不能创建对象)。

3.接口中的成员不能加“访问修饰符”,默认就是public。

4.接口中的成员不能有任何实现(必须“光说不做”)。

5.接口中只能有方法、属性、索引器、事件,不能有“字段”和构造函数。

6.接口与接口之间可以继承,并且可以多继承。

7.接口并不能去继承一个类,而类可以继承接口(类可以继承多个接口)。

8.实现接口的子类必须实现该接口的全部成员。

注意:抽象类的方法被子类实现时必须在实现方法前+override;但是子类实现的接口的方法不用+任何修饰符

序列化与反序列化的代码示例

        将某个对象传输给对方电脑Person p = new Person();  //例如:人这个对象,假设这个示例类已经定义好了p.Name = "霍金";p.Age = 27;p.Gender = '男';using (FileStream fsWrite = new FileStream(@"C:\Users\SpringRain\Desktop\111.txt", FileMode.OpenOrCreate, FileAccess.Write)){ //开始序列化对象BinaryFormatter bf = new BinaryFormatter();bf.Serialize(fsWrite, p);}Console.WriteLine("序列化成功");//接收对方发送过来的二进制 反序列化成对象Person p;using (FileStream fsRead = new FileStream(@"C:\Users\SpringRain\Desktop\111.txt", FileMode.OpenOrCreate, FileAccess.Read)){BinaryFormatter bf = new BinaryFormatter();p = (Person)bf.Deserialize(fsRead);}

部分类概念

用partial修饰class,将两个相同类名的partial class当做一个类使用。(用于多人协作)

sealed密封类的概念

不能够被其他类继承,但是可以继承于其他类。

本文为归纳和补充重要知识点,具体更为详细内容总结可查看此链接

C#基础知识框架整理_c#框架-CSDN博客文章浏览阅读4.2k次,点赞10次,收藏46次。注意:表达式2的结果类型必须跟表达式3的结果类型一致,并且也要跟整个三元表达式的结果类型一致。结构的使用函数的调用全局静态字段方法中的高级参数用法out、ref、params什么是属性访问修饰符静态和非静态的区别静态类的使用new关键字的作用3.调用对象的构造函数进行初始化对象属性的概念及作用英文对照静态和非静态的区别析构函数构造函数的概念this关键字的用法_c#框架https://blog.csdn.net/i78i845/article/details/128184420?ops_request_misc=&request_id=&biz_id=102&utm_term=C&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-5-128184420.142

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/393943.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务-实现nacos的集群和Gateway网关的实现、认证校验、解决跨域

1. nacos的集群模式 1.1 分析 nacos在企业中的使用100%都是集群模式。需要掌握nacos集群的搭建 nacos的数据存放在derby本地磁盘中&#xff0c;nacos集群模式会导致数据库数据不一致&#xff0c;使用加一层思想&#xff0c;修改nacos的数据库&#xff0c;使用mysql数据库&…

浅析中国蚁剑的木马加密流量

简介 在蓝帽杯 2022 初赛中&#xff0c;domainhacker 的流量分析题目聚焦于中国蚁剑这款 webshell 管理工具的流量特征。通过对比赛提供的数据包进行解析&#xff0c;本文将深入分析蚁剑在连接木马时产生的加密流量。 公司安全部门&#xff0c;在流量设备中发现了疑似黑客入侵的…

idea使用free流程,2024idea免费使用

1.先到官网下载&#xff0c;这里选择win系统的&#xff0c;点击下图的.exe https://www.jetbrains.com/idea/download/?sectionwindows 2.下载好后基本上就是一直点击“下一步”到直到安装好&#xff0c;安装好后先打开软件后关闭退出 3.下载配配套资料 链接: https://pan.ba…

MySQL内存模型与相关技术

MySQL实例的大概结构如下 如上图所示&#xff0c;InnoDB的存储引擎右多个内存块 维护所有进程/线程需要访问多个内部数据结构缓存磁盘上的数据&#xff0c;方便快速读取&#xff0c;且修改的数据缓存在此&#xff0c;满了后统一写入磁盘重做日志&#xff08;redo log&#xf…

5.3 需求分析

需求分析 软件需求定义分类练习题 需求工程需求获取练习题 需求分析状态转化图数据流图DFD顶层数据流图0层数据流图1层数据流图 练习题 需求规约需求定义方法 需求验证需求管理版本控制需求跟踪变更控制练习题 考试大概3分 软件需求 定义 软件需求&#xff1a;是指用户对目标…

【QT常用技术讲解】tableWidget右键菜单及多进程编程

前言 本文在QT项目的开发框架的基础上&#xff08;源代码&#xff09;增加tableWidget的右键菜单功能&#xff0c;并使用进程实现ping计算机的功能来讲解&#xff0c;本文不对进程间通信进行讲解。 概述 一个项目在开发过程中&#xff0c;通常面临着引入“第三方应用”&#x…

春秋云境 | 文件上传 | CVE-2022-30887

目录 靶标介绍 开启靶场 上传一句话木马 蚁剑连接 找到 flag 靶标介绍 多语言药房管理系统 (MPMS) 是用 PHP 和 MySQL 开发的, 该软件的主要目的是在药房和客户之间提供一套接口&#xff0c;客户是该软件的主要用户。该软件有助于为药房业务创建一个综合数据库&#xff0…

【代码随想录训练营第42期 Day22打卡 回溯Part1 - LeetCode 77. 组合 216.组合总和III 17.电话号码的字母组合

目录 一、做题心得 二、回溯基础知识 1.定义 2.适用问题 3.一个思想 4.代码实现 三、题目与题解 题目一&#xff1a;77. 组合 题目链接 题解&#xff1a;回溯 题目二&#xff1a;216.组合总和III 题目链接 题解&#xff1a;回溯 题目三&#xff1a;17.电话号码的字…

第十九天(2024.8.7)Vue Element-plus

1.Vue 1.创建vue文件 1.创建一个文件夹来存储vue文件 我在D盘下创建了一个EasyVue文件夹来存储vue文件 2.在控制台中输入 如果在控制台中按下面步骤成功不了的话&#xff0c;尝试&#xff1a;1.用管理员身份运行控制台 2.关闭防火墙 3.打开编码工具&#xff08;Visual St…

WPF学习(5)- Border控件(边框布局)+GridSplitter分割窗口

严格来说&#xff0c;Border并不是一个布局控件&#xff0c;因为它并不是Panel的子类&#xff0c;而是Decorator装饰器的子类&#xff0c;而Decorator继承于FrameworkElement。我们要先看看它的父类Decorator。 public class Decorator : FrameworkElement, IAddChild {public…

CUDA编程05 - GPU内存架构和数据局部性

一&#xff1a;概述 到目前为止&#xff0c;我们已经学会了如何编写 CUDA 核函数&#xff0c;以及如何设置和分配大量线程来执行核函数。我们还了解了当前 GPU 硬件的计算架构&#xff0c;以及线程在硬件上调度执行过程。在本章中&#xff0c;我们将重点关注 GPU 的片上(on-chi…

Redisson 实现分布式锁

文章目录 Redisson 是什么Redisson 使用客户端模式单节点模式哨兵模式主从模式集群模式Spring Boot 整合 Redisson 中的锁Redisson 可重入锁Redisson 公平锁Redisson 联锁Redisson 读写锁Redisson Redlock Redisson 的看门狗机制RedLock 解决单体故障问题如何使用 RedLockMarti…

【C语言篇】操作符详解(上篇)

文章目录 操作符详解&#xff08;上篇&#xff09;前言sizeof强制类型转换算术操作符赋值操作符逻辑操作符逻辑取反运算符逻辑与运算符逻辑或运算符 关系操作符自增自减操作符和-逗号表达式 操作符详解&#xff08;上篇&#xff09; 前言 操作符又被叫做运算符&#xff0c;是不…

进程状态(三)----- linux 中具体的进程状态(下)

目录 前言1. T && t 状态2. X 与 Z 状态3. 孤儿进程 前言 继上一篇文章 进程状态&#xff08;二&#xff09;----- linux 中具体的进程状态&#xff08;上&#xff09; 介绍了 linux 系统中具体的 R、S、D 状态&#xff0c;而这篇文章继续介绍 linux 系统中剩下的三种…

SpringBoot简单项目(二维码扫描)

pom.xml中导入依赖 <!-- zxing --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.0</version></dependency><dependency><groupId>com.google.zxing</gro…

探索七款前沿UI设计软件:创新与实践

之前我们分享了制作原型的有用工具。制作完原型后&#xff0c;我们需要优化界面&#xff0c;这就是 UI 设计师的任务了。UI 设计软件对设计师来说非常重要。UI 设计工具的使用是否直接影响到最终结果的质量&#xff0c;所以有人会问&#xff1a;UI 界面设计使用什么软件&#x…

Java批量查询CSDN质量分

文章目录 前言代码实现pom.xml实体类工具类质量分查询 效果开源仓库 前言 在CSDN平台申请“专家博主”、“优质创作者”等称号的时候&#xff0c;往往会对博客的质量分有一定的要求&#xff0c;这时候我们需要审视以往所发表的博客&#xff0c;找出质量分较低的博客&#xff0…

nordic 蓝牙ble 配对绑定的流程 原理

目录 配对和绑定的基本概念 配对和绑定的流程 1. 配对请求和响应 2. 配对方法选择 3. 密钥生成和交换 4. 配对完成和绑定 配对和绑定的代码实现 初始化Peer Manager 处理Peer Manager事件 处理BLE事件 启动广播 在Nordic芯片上实现蓝牙低功耗(BLE)设备的配对和绑定…

Python 为Excel单元格设置填充\背景色 (纯色、渐变、图案)

在使用Excel进行数据处理和分析时&#xff0c;对特定单元格进行背景颜色填充不仅能够提升工作表的视觉吸引力&#xff0c;还能帮助用户快速识别和区分不同类别的数据&#xff0c;增强数据的可读性和理解性。 本文将通过以下三个示例详细介绍如何使用Python在Excel中设置不同的单…

sql注入——sqlilabs1-15

目录 sql注入靶场练习--sqlilabs 1.less-1​编辑 1.测试发现单引号为逃逸符号 2.确定查询列数为三列 3.查询到数据库名 4.查询数据库中的表名 5.查询用户表的列名字 6.查询用户信息 2.less-2​编辑 2.确定查询列数为三列 3.查询到数据库名 4.查询数据库中的表名 5.…