C#学习笔记
Sr-浮生
这个作者很懒,什么都没留下…
展开
-
C#学习笔记-委托和事件
委托的本质是一个类,继承自一个特殊类MulticastDelegate,自己写的类不能继承于这个特殊类原创 2022-11-11 16:34:19 · 836 阅读 · 1 评论 -
C#学习笔记-WPF框架(MvvmLight)
1.框架引用 1.1 MvvmLight 1.2 MvvmLight+PropertyChanged.Fody 在项目中,添加NuGet程序包,浏览处,查找MvvmLight程序包和PropertyChanged.Fody程序包,安装配置到项目中。添加完这些NuGet程序包之后,项目中会有一个ViewModel的文件夹,包含了ViewModelLocator、MainViewModel两个文件,以及在app.xmal文件中添加了一个资源引用。ViewModelLocato...原创 2021-11-07 16:21:23 · 2038 阅读 · 0 评论 -
C#学习笔记-C#-EF-MySql入门
运行环境准备安装mysql数据库,Maria DB 10.5.12,下载地址MariaDB 10.5.12 安装mysql-for-visualstudio,下载地址:mysql-for-visualstudio-1.2.10.msihttps://dev.mysql.com/downloads/windows/visualstudio/ 安装mysql-connector-net,下载地址:mysql-connector-net-8.0.27.msihttps://dev.mysql.com/.原创 2021-10-25 17:22:33 · 503 阅读 · 0 评论 -
C#学习笔记-WPF资源字典在类库的添加及调用
1、问题 (1)如何在类库中添加资源字典? (2)类库中添加资源字典需要添加什么引用? (3)如何调用类库中的资源字典?2、问题描述&解决方案 (1)如何在类库中添加资源字典? 在一个新建的类库项目中,是不能直接添加资源字典文件(.xaml),想要在类库中,右键能够添加资源字典,需要修改项目工程文件(.csproj),在工程文件中添加下面几行代码 <ProjectTypeGuids>{60dc8134-eba5-43b8...原创 2021-10-23 11:33:14 · 6979 阅读 · 2 评论 -
C#学习笔记-WPF之MVVM框架
1、定义 MVVM是Model-View-ViewModel的简写。它本质上就是MVC 的改进版。MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开。 M:Model(模型)数据模型,用来存储数据 V:View(UI界面) VM:View(ViewModel) 2、设计一个简单的MVVM模型2.1基础类(继承INotifyPropertyChanged) 当数据属性发生变化时,使UI界面能同步...原创 2021-09-30 10:33:20 · 3461 阅读 · 0 评论 -
C#学习笔记-Winform根据数据自动生成控件
1、思路 (1)获取一个集合(数据) (2)遍历集合,设置统一的控件样式、设置控件坐标 (3)关联事件2、实现 项目开发中,当需求发生改变时,UI界面需要简单更改,这时代码就需要去修改,这样子做比较麻烦,因此可以通过获取数据库数的方式,增加、删除、更改,更改这部分简单的UI需求。2.1 数据库连接配置 本文采用SQLite轻量型数据库,配置数据库。实体类Student public class Stude...原创 2021-09-29 17:17:12 · 2733 阅读 · 2 评论 -
C#学习笔记-INotifyPropertyChanged接口简单描述
数据源是一个对象,一个对象可以有很多的元素,这些对象通过属性展示给外界。对于UI上的元素某个属性值的变化,由Binding送达的属性叫做Binding的Path(路径)。在做一个属性具有通知Binding值已经变化的能力,通过实现INotifyPropertyChanged接口,属性值变化是会通知Binding端元素的UI,属性已经发生变化,并在UI中显示新的值。Binding设置了数据源后,会自动监听INotifyPropertyChanged事件。 class...原创 2021-08-26 10:07:25 · 1165 阅读 · 0 评论 -
C#学习笔记-WPF布局规则
1.布局的原则 (1)屏幕适应程序,不要显示设置的元素(控件)的尺寸,可以设置最小或者最大尺寸 (2)不应使用屏幕坐标元素位置,由容器决定 (3)容器可以嵌套2.布局的容器 WPF的顶级元素:Pag、Window、Application (1)Grid(网格)<window><Grid>.....</Grid></window> 通过Grid.RowDefinitions...原创 2021-08-26 09:13:24 · 770 阅读 · 0 评论 -
C#学习笔记-正则表达式的应用
在web开发和Cs开发中,开发者都会面对数据校验的校验的问题,不正确的校验,可能会曹成数据异常,使用正则表达式,则可以避免大部分这样的问题。 在C#原创 2021-06-18 09:26:32 · 114 阅读 · 0 评论 -
C#学习笔记-基于Socker通讯开发的TCP/IP服务器客户端
服务器端程序的编写步骤: 第一步:调用socket()函数创建一个用于通信的套接字。 第二步:给已经创建的套接字绑定一个端口号,这一般通过设置网络套接口地址和调用bind()函数来实现。 第三步:调用listen()函数使套接字成为一个监听套接字。 第四步:调用accept()函数来接受客户端的连接,这是就可以和客户端通信了。 第五步:处理客户端的连接请求。 第六步:终止连接。...原创 2021-06-16 14:52:50 · 452 阅读 · 2 评论 -
C#学习笔记-winform登录简单框架
用户登录框架主体:Login窗体、主窗体、其他窗体思路:1、创建login窗体和DialogResult成员变量,DialogResult成员变量用于接收Login窗体的DialogReslut返回结果 2、登录(数据校验、封装用户对象、数据库交互、结果返回) 3、创建一个全部变量用于存储用于存储用户信息 4、显示登录信息...原创 2021-05-22 09:06:04 · 461 阅读 · 1 评论 -
C#学习笔记-多线程Task(任务)二
TaskCreationOptions的使用与了解TaskCreationOptions是Task任务的一个枚举,当Task任务长时间运行时,建议在创建任务时,使用TaskCreationOptions.LongRunning长时间的任务在ThreadPool中,如果长时间不归还线程,系统会强制开启一个新的线程,会一定程度的影响程序的性能在使用TaskCreationOptions.AttachedToParent时,其作用相当于Task.WaitAll // // 摘要:原创 2021-04-22 10:53:44 · 1066 阅读 · 0 评论 -
C#学习笔记-多线程Task(任务)一
Task的定义任务和线程的区别:1、任务是架构在线程之上的,也就是说任务最终还是要抛给线程去执行。2、任务跟线程不是一对一的关系,比如开10个任务并不是说会开10个线程,这一点任务有点类似线程池,但是任务相比线程池有很小的开销和精确的控制。3、Task的优势 ThreadPool相比Thread来说具备了很多优势,但是ThreadPool却又存在一些使用上的不方便。比如: ◆ ThreadPool不支持线程的取消、完成、失败通知等交互性操作; ◆ ThreadPool不支持线程执行原创 2021-04-13 23:33:19 · 610 阅读 · 0 评论 -
C#学习笔记-Thread多线程和跨线程访问
线程(Thread)线程(Thread)是进程中的基本执行单元多线程的优点:可以同时完成多个任务;可以使程序的响应速度更快;可以让占用大量处理时间的任务或当前没有进行处理的任务定期将处理时间让给别的任务;可以随时停止任务;可以设置每个任务的优先级以优化程序性能。多线程实际上是通过时间片的间隔来完成的。线程的内部数据结构:线程的ID、想成的环境(会在Cpu的寄存器中占用空间)操作系统会默认分配1MB的空间给用户堆栈,用于局部变量和参数值传递,如果在创建一个线程时,使用了死循环,可能会造成堆原创 2021-04-10 12:32:25 · 638 阅读 · 2 评论 -
C#学习笔记-自定义泛型委托、系统泛型委托
自定义泛型委托1、为什么要使用自定义泛型委托?普通委托对数据类型有一定限定,用泛型委托,可以在需求发生变化时,适应这边变化。定义:泛型委托和泛型方法很相似,可以关联具体方法、匿名方法、lambda表达式。 //声明自定义泛型委托 public delegate T MyGenericDelegate<T>(T param1, T param2); class MyGenericDemo { public void Test()原创 2021-03-03 12:34:26 · 943 阅读 · 0 评论 -
C#学习笔记-匿名方法、Lambda表达式
匿名方法定义:本质上匿名方法就是委托,没有方法名,由delegate关键字修饰,具有方法参数和方法体。优点:将具体方法和委托关联在一起,若委托只需要一个具体方法,使用匿名方法比较简洁Lambda表达式:可以简写代码1、lambda表达式中的参数可以是明确类型也可以是推断类型2、lambda表示式的推断类型有上下文决定3、=>读作goes to,左边为参数,右边为方法体(表达式,语句块)4、若方法体中只有一句,可以直接用这句表达式,不用花括号。lambda表达式与匿.原创 2021-03-03 11:19:04 · 265 阅读 · 0 评论 -
C#学习笔记-委托与事件
委托特性委托是一种程序特性,用于表示方法(方法的代表,方法的指针),通俗来说就是自己做不了的,通过委托任务给别人来完成。在委托中,可以动态的增加或删减具体方法与委托变量的关联。多播委托是指委托变量中有多个具体方法,委托变量执行时会按照具体方法加入的先后顺序,执行具体方法。委托使用的一般步骤1、声明委托 //1、声明委托 public delegate void SendMsgDelegate(string msg); public delegate void Re原创 2021-03-01 15:42:39 · 280 阅读 · 0 评论 -
C#学习笔记-Generic泛型和泛型约束
泛型(Generic)泛型集合List<T>、Dictionary<k,v> 所在命名空间:System.Collections.Generic;比较非泛型:ArryList,Hastable 所在命名空间:System.Collections非泛型集合ArryList里面可以添加任意类型,添加方便的对于数据本身来讲,是非常不安全的。因为我们开发中很多时候,这些是不可控的。其次,还存在拆装箱的问题。装箱:将值类型的元素,放到集合中会被转换成objec...原创 2021-02-27 10:24:46 · 219 阅读 · 0 评论 -
C#学习笔记-继承、多态、里氏替换原则(二)
前文链接:https://blog.csdn.net/qq_39157152/article/details/113347386三、里氏替换原则里氏替换原则(Liskov Substitution Principle,简称LSP):子类可以替换父类。父类变量接收子类对象,接口变量接收接口实现类的对象。注意:当使用父类类型的时候,子类特有的行为和属性会被屏蔽。应用场合示例:程序的启动入口、窗体的Controls集合等。子类独立使用的示例:窗体、控件、自定义控件等 st.原创 2021-01-28 17:25:58 · 180 阅读 · 0 评论 -
C#学习笔记-继承、多态、里氏替换原则(一)
一、继承的基础理论:在生活中,物质的继承,房子的所有权的继承,由A户主到B户主或其他户主。软件中的继承就是类与类之间的关系 继承的单根性:A类=>B类=>C类(单向传递,不能循环继承、多项继承,反向继承)使用继承可以更好对相同特征的对象进行代码复用、多态拓展优点:1、提高代码的复用性,子类拥有父类的属性和方法 2、可拓展性,子类可以有不同于父类,拥有自己的特性(行为和属性)缺点:1、具有侵入性、高耦合,不够灵活,在一定程序上约束了子类...原创 2021-01-28 16:59:00 · 308 阅读 · 0 评论 -
C#学习笔记--面向对象编程的基础原则
在学习面向对象编程中主要就是为了学习OPP中的各种原则、方法、技巧(基础知识灵活的组合或者解决问题的技巧)、模式(20+种设计模式)、经验等原则是面向对象的指导思想。公认的有六大原则。1、对象职责明确原则(对象单一原则) 设计一个对象(类),就是设计这个对象包含的行为、特征。在设计对象时,应避免设计万能类2、开放封闭原则 在设计对象(类)时,应尽可能的考虑后续需求更改时,需要修改设计少的原则3、里氏替换原则 接口、继承、多态用的情况较多。 public parti...原创 2021-01-28 11:00:21 · 281 阅读 · 0 评论 -
C#学习笔记--事件的统一关联(集中处理)
关于控件事件的一些简单介绍,可以参考链接:https://blog.csdn.net/qq_39157152/article/details/113242984在程序开发中,遇到控件要关联类似的事件,重复输入关联是一件很繁琐的事情,所以可以使用事件统一关联的处理方式,符合面向对象编程的开闭原则。开闭原则:程序拓展,封闭修改。以下是原始的关联方式,比较繁琐,当程序有上千个控件需要关联时,界面和关联都会显得很臃肿。 //关联事件 //this...原创 2021-01-27 12:14:14 · 664 阅读 · 0 评论 -
C#学习笔记-窗体、控件、事件的关联
窗体(windows项目)一个窗体类包括主代码类和部分类(partial关键字修饰)。部分类:窗体名.Designer.cs部分类的使用,是通过partial关键字修饰,可以把两个同名的类关联,本质上都是一个类,方便维护,编译器编译时,会把这两个类编译在一起。主启动窗体:在Program中的Application.Run(new FrmMain());中启动,可以在Main方法中添加判断,判断程序是否重复执行,或者注册验证等。 static class Program {原创 2021-01-27 11:20:03 · 1739 阅读 · 0 评论 -
C#学习笔记-泛型集合LIST<T>、字典 Dictionary<TKey, TValue>
List<T>1、什么是泛型?泛型就是程序的一种特性,用于限定程序的类型。string[]、int[]等基础数据类型和自定义类型都是确定类型的。2、为什么要使用集合?数组在定义是需要明确元素个数,在程序开发中,若是在声明变量时,不确定元素格式,使用数组可能会存在冗余和超出数组界限的情况,集合的声明不需要考虑元素的个数,根据实际的设计需要自动增长。3、常用集合方法 List<string> nameList = new List<s原创 2021-01-26 12:35:46 · 1682 阅读 · 0 评论 -
C#学习笔记-构造方法、实例方法、静态方法
构造方法构造方法(Constructor):构造对象其实就是创建对象。在创建对象过程中,需要调用的方法,叫做构造方法。构造方法的本质是为了如何对字段、属性、对象或其他的相关性的初始化。初始化调用顺序:字段=》属性=》=》构造方法在一个类中,如果没有显示的去写一个构造方法,编译器会默认给这个类添加一个无参数的构造方法且若存在调用的类没有无参数的构造方法,再去调用会出错构造方法的规范写法 class MyClass { public MyClass()原创 2021-01-25 12:35:43 · 987 阅读 · 0 评论 -
C#学习笔记--字符串类的小结
字符串String 类是密封的,被sealed修饰,具有不可变性,还有字符串池。1、不可变性 当一个字符串被声明和赋值的时候,其变量指向的地址在堆中的地址内容是不可变的,只有在程序结束时,才能被释放,当然可以通过StringBuilder对字符串进行操作。//以下操作相当于在堆中开辟五块内存地址//"a""b""c"在堆中的地址如何没有相应的栈内存指向,会一直保存在堆中,知道程序关闭释放string a="a";string b="b";string c="c";a=a+b;//..原创 2020-06-26 18:12:33 · 184 阅读 · 0 评论 -
c#学习笔记-软件开发的一般步骤(基于三层架构)
1.需求分析在正式开展一个新项目之前,首先要去做好需求分析,对项目中所需要的用到的功能,及项目开发文档中提出的设计需求做出分析。2.项目框架的选择2.1 对于小型项目可以采用两层或者三层架构进行程序设计2.2 对于大型项目至少要使用三层架构和其他架构组合设计3.框架搭建3.1 UI层的设计(UI部分负责对UI控件部分的操作,不负责过多的数据访问处理)3.2 添加需要的模块(Models、DAL、BLL)3.3 添加模块之间的关系(引用)3.4 通用数据访问类的编写..原创 2021-01-21 10:17:38 · 2998 阅读 · 1 评论 -
C#学习笔记-OPP中的属性和字段
在面向对象编程中,程序的基本单元就是类设计程序(软件)本质就是就是设计各式各样的类,而软件的组成就是各种模块的组成(动态链接库DLL)类(Class):属性(用于存储数据)是数据存储的入口,是对象的数据 方法是对象的行为,其封装就是改变对象的行为,解决数据和业务逻辑之间的关系。在一个类中可能有属性、字段、方法,由于在使用字段的时候,可能存在不安全的情况。所以在面向对象编程中,对外访问数据一般建议使用属性。属性和字段的区别字段:1.字段一般在...原创 2021-01-21 17:31:13 · 272 阅读 · 1 评论 -
C#学习笔记-序列化和反序列化文件操作
程序中,序列化保存数据(小),会起到一定好处的加密作用。文件的序列化操作(针对实体类)1.对实体类添加序列化标记[Serialize] /// <summary> /// 学生的实体类 /// </summary> [Serializable] public class StudentModel { public string StuName { get; set; } public st原创 2021-01-24 18:29:49 · 336 阅读 · 0 评论 -
C#学习笔记-程序中的异常处理
在程序中,容易出现异常的程序如果没有异常处理方式,可能会导致程序的奔溃。这就需要我对可能发生异常的程序段,添加一个异常的处理的方法。异常处理的方式:1、即时处理:发现异常,即时处理异常,恢复程序的运行 2、抛出异常:捕获异常之后,向上抛出异常(throw)常用两种形式:try ....catch....(finally) 自定义异常 throw。自定义异常没有引发CLR异常,而是通过App...原创 2021-01-24 13:19:56 · 1377 阅读 · 4 评论