C#程序设计案例开发教程

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: C#程序设计案例开发教程

C#程序设计

第五章

知识点

窗体的概念:微软的长处,桌面程序、操作系统

WEB开发:H5、CSS3、JAVA

稍微弱点同学或者留在三、四线,五六线,七八线的同学,用这个挣钱快。

郑州的留下来就业的同学,这个需求还可以。

未来:VR 动漫模特 、游戏(带VR眼睛),这些都是C#开发的。Unitry3D。

窗体:Form界面–>浏览器

控件:表单里面的表单元素

修饰:属性

学习思路

思路:技巧,不要着急,上课注意听,下课好好练,不练跟着我上班。

重点是记步骤:

1.目标

2.去实现,要的哪些元素;

3.逐个攻克

4.达成目标

重点

1.新建项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RBgTAb64-1672665792832)(E:\政通路\课堂笔记\S1\C#课程\assets\1567579830702.png)]

2.给新建的form窗体重命名

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IQTXejTT-1672665792839)(E:\政通路\课堂笔记\S1\C#课程\assets\1567579969381.png)]

2.1初始效果,出来的时候,就最大化:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sv1lCCoz-1672665792840)(E:\政通路\课堂笔记\S1\C#课程\assets\1567580075777.png)]

2.2有最大化、最小化按钮,不能动

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cGT5knVc-1672665792842)(E:\政通路\课堂笔记\S1\C#课程\assets\1567580230844.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T7B4eyvz-1672665792844)(E:\政通路\课堂笔记\S1\C#课程\assets\1567580241967.png)]

2.3 要的图片

试验:PictureBox

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mAOMUo3W-1672665792846)(E:\政通路\课堂笔记\S1\C#课程\assets\1567580825771.png)]

试验:窗体背景

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BCAmgJ8D-1672665792847)(E:\政通路\课堂笔记\S1\C#课程\assets\1567581001406.png)]

建议大家使用第一种,第二种会加载比较困难。

2.4 菜单

2.5工具栏

2.6状态栏

2.7新窗体:

居中父容器中间:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8wSndQsf-1672665792849)(E:\政通路\课堂笔记\S1\C#课程\assets\1567589193496.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ga907txK-1672665792850)(E:\政通路\课堂笔记\S1\C#课程\assets\1567589317297.png)]

MDI:窗体;什么是MDI

难点

MDI

第六章:MDI

时钟:timer

enabled:true false 是否可用。

interval:毫秒 1秒=1000毫秒,时间间隔

事件:tick 滴答事件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AybERouD-1672665792852)(E:\政通路\课堂笔记\S1\C#课程\assets\1567751124501.png)]

ImageList:图像列表,可以存放多个图像;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OzwkR3rI-1672665792854)(E:\政通路\课堂笔记\S1\C#课程\assets\1567753617625.png)]

第七章:ADO.Net

项目中需要连接数据:ado.net

1.添加MySql.Data

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OHr6l87j-1672665792856)(E:\政通路\课堂笔记\S1\C#课程\assets\1567757976361.png)]

2.在代码处,导入命名空间;

//导入mysql的操作类

using MySql.Data.MySqlClient;

3.下面的操作

所有的数据库程序都遵循的步骤:

1.连接

2.命令;

3.执行(查询、增删改)

4.关闭

代码:

(1)建立连接:
MySqlConnection sqlCon= new MySqlConnection("Database=数据库名字;Data Source=服务器的ip地址;User Id=用户名;Password=用户密码");
或者:
MySqlConnectionsqlCon= new MySqlConnection("server=服务器的ip地址;user id=用户名;password=用户密码;database=数据库名字");
或者:
 string M_str_sqlcon = "server=服务器ip地址;User Id=用户名;password=用户密码;Database=数据库名字";//根据自己的设置
 MySqlConnection sqlCon = new MySqlConnection(M_str_sqlcon);
注释:server=服务器ip地址;User Id=用户名;password=用户密码;Database=数据库名字,这几个的顺序可以调换,只要对准每个字符串和标识符就好了。 
(2)执行sql命令://设置查询命令
MySqlCommand  mycmd= new MySqlCommand("select * fromt_dept whereTITLElike '%p%'", sqlCon);
所有代码试验
3.代码
  //1.url:连接mysql数据的字符串,conn
        String url = "server=127.0.0.1;user id=root;password=root;database=dormdb";
        MySqlConnection conn = new MySqlConnection(url);
        conn.Open();        //打开
        //2.命令对象;
        //根据学生用户名和密码来查询所有信息;
        String stuName = txtName.Text;  //trim()
        String stuPwd = txtPwd.Text;
        String sql = String.Format(@"select * from student where stuUserName='{0}' and stuPass='{1}'", stuName, stuPwd); ;
        MySqlCommand comm = new MySqlCommand(sql, conn);//根据conn连接对象,来执行命令;
        //3.开始执行查询;
        MySqlDataReader reader = comm.ExecuteReader();
        if (reader.HasRows)
        { //HasRow:表示有行;
            MessageBox.Show("登录成功");
            //去宿舍系统怎么办?
            this.Hide();
            dormSys dorm = new dormSys();
            dorm.Show();
        }
        else
        {
            MessageBox.Show("登录失败");
        }

第八章:数据的增删改

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ObcFScTi-1672665792857)(E:\政通路\课堂笔记\S1\C#课程\assets\1568010049260.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hDEKrac2-1672665792858)(E:\政通路\课堂笔记\S1\C#课程\assets\1568010062627.png)]

一.增删改的步骤

1,增加的时候sql比较复杂

insert into student(stuNum,stuName,stuUserName,stuPass,sex,birthday)

values()

2.在()写{},{},{}等占位符,然后根据数据类型确定在占位符两边是否加’',

“insert into student(stuNum,stuName,stuUserName,stuPass,sex,birthday)

values(‘{0}’,‘{1}’,‘{2}’,‘{3}’,‘{4}’,‘{5}’)”

同学犯的自增,他写了前面4个,后面5个。铁定报错。

id:1;主键重复;

3.建议使用变量,多了几行变量的代码,但是会理解起来简单.

String stuNum=txtNum.Text.Trim();

String stuName=txtName.Text.Trim(); //去除两边空格;

String userName=txtUserName.Text.Trim();

String pwd=txtPwd.Text.Trim();

String sex=radMen.Checked?“男”:“女”; //三元运算符; if(radMen.Checked)赋值;

String birth=dtDate.Value;

4.给参数放到sql里面

@"insert into student(stuNum,stuName,stuUserName,stuPass,sex,birthday)
values('{0}','{1}','{2}','{3}','{4}','{5}')", stuNum, stuName, userName, pwd, sex, birth

5.执行

comm.ExecuteNoQuery();

完整代码:

string url = "server=127.0.0.1;user id=root;password=root;database=dormdb;charset=utf8";
            MySqlConnection conn = new MySqlConnection(url);
            conn.Open();//打开连接;
            //增加数据的sql拿过来;
            String stuNum=txtNum.Text.Trim();
            String stuName=txtName.Text.Trim();  //去除两边空格;
            String userName=txtUserName.Text.Trim();
            String pwd=txtPwd.Text.Trim();
            String sex=radMen.Checked?"男":"女";  //三元运算符; if(radMen.Checked)赋值;
            String birth=dtDate.Value.ToString();
            String sql = String.Format(@"insert into student(stuNum,stuName,stuUserName,stuPass,sex,birthday)
values('{0}','{1}','{2}','{3}','{4}','{5}')", stuNum, stuName, userName, pwd, sex, birth);
            MySqlCommand comm = new MySqlCommand(sql, conn);
            int result = comm.ExecuteNonQuery();  //NoQuery()返回的是受印象的行数。
            Console.WriteLine(result);
            if (result > 0)
                MessageBox.Show("数据增加成功");
            else
                MessageBox.Show("数据增加失败");

二.数据适配器

类似于电源适配器

从数据源把数据拿到DataSet(数据集)的DataTable(数据表)

方法:fill()和update()

封装提取代码:

2.1建立一个公共的文件夹

util,下面建立一个类DBHelper.cs类

class DBHelper
    {
        static String url = "server=127.0.0.1;user id=root;password=root;database=dormdb;charset=utf8";
        //静态属性,静态方法,到时候可以直接类名.属性|方法
        public static int update(String sql){
            MySqlConnection conn = new MySqlConnection(url);
            conn.Open();        //打开
            MySqlCommand comm = new MySqlCommand(sql, conn);
            int result = comm.ExecuteNonQuery();
            conn.Close();       //关闭资源,相当于你打电话,挂机;
            return result;    //返回受影响的行数;
        }        
        //查询
    }
     //查询,这个参数是查询的sql;小车去拉货,36份蟹黄堡(超大份10斤);仓库就是教学楼;
        public static DataTable query(String sql) {
            MySqlConnection conn = new MySqlConnection(url);
            conn.Open();        //打开;公路;
            MySqlDataAdapter adapter = new MySqlDataAdapter(sql,conn);  //小车;
            DataTable dt = new DataTable();     //定义一个新的数据表;就相当于一间的库房;
            adapter.Fill(dt);//卸车到库房;Fill填充(库房)
            return dt;
        }

使用的时候:

using chapter07.util;         //引用公共的数据库操作类的命名空间.

再次测试之前的增删改,会发现继续OK!

2.2 使用SqlDataAdapter进行查询,查询到数据表格。

using System.Data;  //这个是为了使用DataTable
这个是DataTable的所在命名空间.

2.3 DataGridView

数据 表格 视图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zt9B0xo0-1672665792859)(E:\政通路\课堂笔记\S1\C#课程\assets\1568018952221.png)]

2.4 查询按钮里面的代码:

String sql = "select stuId 编号,stuName 姓名,stuUserName 账户 from student where sex='男'";
            DataTable dt = DBHelper.query(sql); //数据在DataTable里面
            dataGridView1.DataSource = dt;//它只需要找数据源即可.
            //dataGridView1.Columns[0].HeaderText = "编号";

第九章 :项目问题

1.窗体多次打开问题

之前使用菜单打开子窗体的时候,点一次出来一次,解决这个问题,有多重方法。

我们讲一种简单的方法,简单失效。

Factory.cs 工厂类

思路是建立一个公共的 静态的实例化对象;

public static frmStudent stu=new frmStudent();

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tqWdboMd-1672665792860)(E:\政通路\课堂笔记\S1\C#课程\assets\1568183868608.png)]

再次强调:

xxx项目.util的命名空间就是项目中通用的类库的所在。

使用步骤:

1.在util下建立Factory类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1pcXWBia-1672665792860)(E:\政通路\课堂笔记\S1\C#课程\assets/99921879.bmp)]

2.Factory类写代码:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CaUHW008-1672665792861)(E:\政通路\课堂笔记\S1\C#课程\assets/2338246992.bmp)]

3.主窗体调用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HueNyTuh-1672665792862)(E:\政通路\课堂笔记\S1\C#课程\assets/1193091873.bmp)]

4.按钮或菜单调用的代码:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v3NlJexF-1672665792863)(E:\政通路\课堂笔记\S1\C#课程\assets/2805152725.bmp)]

  1. 解决bug,在新窗体的关闭时刻的代码:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OqW6BGnu-1672665792865)(E:\政通路\课堂笔记\S1\C#课程\assets\1568187207777.png)]

2.模糊查询问题

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BPIEgfsG-1672665792865)(E:\政通路\课堂笔记\S1\C#课程\assets\1568187562451.png)]

String sql = String.Format("select typeid 编号,typeName 姓名,memo 备注 from teacherType where typeName like '%{0}%'", txtType.Text);
            //调用DBHelper公共类的查询方法;查询出来的数据就给了dt这个数据表对象。
            DataTable dt = DBHelper.query(sql);
            dataGridView1.DataSource = dt;

增加的时候,需要注意已经存在类型的问题:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NwEvfTXT-1672665792866)(E:\政通路\课堂笔记\S1\C#课程\assets\1568192603386.png)]

3.DataGridView数据表格控件

SelectionMode—>FullRowSelect ,选择的是整行;

4.分页处理

思路:

4.1 掌握mysql的分页原理

-- SELECT * FROM teacher
-- order by teachId asc
-- limit 6,3
-- limit 规律: (页数-1)*每页行数 ,每页行数  3-1=2*3
-- LIMIT 0,3   
-- >大于第1个   3:每页显示多少条;
-- 第2页 每页3条;
-- 第3页 每页3天;
-- 23%3==0 求余==0?24/3:23/3+1
-- 23条,每页3条; 23/3=7.1 -->8条;
-- 24条,每页3条;24/3=8  

4.2 掌握PageHelper.cs分页类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
/**
 * 分页类
 */
namespace chapter05.util
{
    class PageHelper
    {
        //1.设置分页类的自定义属性;
        public int pageSize = 3;    //每页显示为3页
        public int count = 0;      //总数为0,,这个变量可以变化;
        public int nowPage = 1;    //当前页为第一页
        //2.设置方法;
        //2.1 计算当前页从第几条开始;第一页:(1-1)*3=0,3;(2-1)*3=3,3;(3-1)*3,3
        //limit 0,3;limit 3,3;limit 6,3
        public int getBegin() {
            return (nowPage - 1) * pageSize;
        }
        //2.2 返回总页数
        public int getTotalPage() {            
            //return this.count % pageSize==0 ? this.count / pageSize : this.count / pageSize + 1;
            return this.count % this.pageSize == 0 ? this.count / this.pageSize :this.count / this.pageSize + 1;
        }
    }
}

4.3.掌握首页 、上一页、下一页、尾页的实现思路

首页:

pageHelper.nowPage = 1; //设置分页类的当前页为第一页

尾页:

pageHelper.nowPage = pageHelper.getTotalPage();

上一页:

pageHelper.nowPage--;
            if (pageHelper.nowPage < 1) {
                MessageBox.Show("已经到达首页","提示信息",MessageBoxButtons.OK,MessageBoxIcon.Information);
                pageHelper.nowPage = 1;
            }

下一页:

pageHelper.nowPage++;
            if (pageHelper.nowPage> pageHelper.getTotalPage()) {
                MessageBox.Show("已经到达尾页", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
                pageHelper.nowPage = pageHelper.getTotalPage();//当前页为总页数;
            }

4.4 分层思路及其dao类的思想

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9Zqe94yh-1672665792867)(E:\政通路\课堂笔记\S1\C#课程\assets\1568791087300.png)]

调用关系:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IR53UDqZ-1672665792868)(E:\政通路\课堂笔记\S1\C#课程\assets\1568791527330.png)]

flush()是公共的被调用的方法,private:在本类使用。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nhmVbe5v-1672665792876)(E:\政通路\课堂笔记\S1\C#课程\assets\1568791638199.png)]

flush()方法去调用dao的方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oEAdVola-1672665792877)(E:\政通路\课堂笔记\S1\C#课程\assets\1568791706334.png)]

好处:比如说李嘉顺,掌握的sql语句非常好,

是不是可以安排他写XXXDao一堆。几个模块写几个?dao类里面可以写很多增删改查的方法。

有查询所有的方法、模糊查询、连接查询、修改方法、根据条件删除。

企业开发就是这样的思路。快、分工明确。

宿舍管理系统视频 https://edu.csdn.net/course/detail/27107

第十章 项目扩展

1.托盘图标

托盘的含义:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tCu5pxJq-1672665792878)(E:\政通路\课堂笔记\S1\C#课程\assets\1569827539413.png)]

像QQ图标这种就是托盘图标。

C#:NotifyIcon

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8JxNLq6J-1672665792879)(E:\政通路\课堂笔记\S1\C#课程\assets\1569827661065.png)]

让我们的程序,不在任务栏显示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vj63L74I-1672665792881)(E:\政通路\课堂笔记\S1\C#课程\assets\1569827822781.png)]

右键菜单(快捷菜单):[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DXfWtvNO-1672665792881)(E:\政通路\课堂笔记\S1\C#课程\assets\1569827915059.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uQroEQmH-1672665792882)(E:\政通路\课堂笔记\S1\C#课程\assets\1569828061248.png)]

设置NotifyIcon的右键菜单是刚才添加的右键菜单:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1F6xecf5-1672665792883)(E:\政通路\课堂笔记\S1\C#课程\assets\1569828109055.png)]

再增加窗体可以最大化(正常化是Normal)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PDchUkMn-1672665792884)(E:\政通路\课堂笔记\S1\C#课程\assets\1569828942059.png)]

2.调用外部程序

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kvSzQjo8-1672665792885)(E:\政通路\课堂笔记\S1\C#课程\assets\1569831970582.png)]

using System.Diagnostics;//计算器进程
using System.Runtime.InteropServices;  //引用系统命名空间。
调用外部exe
calc = Process.Start("calc.exe");

3.mysql加密的几种方式。

– INSERT into student(stuName,stuPass) values(‘lishuai’,MD5(‘123456’))

– select * from student where stuName=‘lishuai’

– select MD5(txtName.text) from 表名

– SELECT SHA(‘123456’)

INSERT into student(stuName,stuPass) values('lishuai',MD5('123456'))
select * from student where stuName='lishuai'
 select MD5(txtName.text) from 表名
 SELECT SHA('123456')
双向加密,一个是加密的字符串,一个是密钥。
加密后的结果:select ENCODE('123456','abc')
解密:Decode(加密字符串,解密密钥)
select DECODE(ENCODE('123456','abc'),'abc')
Select AES_ENCRYPT('zhang','aaa')
Select AES_DECRYPT(AES_ENCRYPT('zhang','aaa'),'aaa')

nt(stuName,stuPass) values(‘lishuai’,MD5(‘123456’))

– select * from student where stuName=‘lishuai’

– select MD5(txtName.text) from 表名

– SELECT SHA(‘123456’)

INSERT into student(stuName,stuPass) values('lishuai',MD5('123456'))
select * from student where stuName='lishuai'
 select MD5(txtName.text) from 表名
 SELECT SHA('123456')
双向加密,一个是加密的字符串,一个是密钥。
加密后的结果:select ENCODE('123456','abc')
解密:Decode(加密字符串,解密密钥)
select DECODE(ENCODE('123456','abc'),'abc')
Select AES_ENCRYPT('zhang','aaa')
Select AES_DECRYPT(AES_ENCRYPT('zhang','aaa'),'aaa')


目录
相关文章
|
1月前
|
前端开发 JavaScript 安全
C#一分钟浅谈:Blazor WebAssembly 开发
Blazor WebAssembly 是一个客户端框架,允许开发者使用C#和Razor语法构建Web应用。本文介绍了Blazor WebAssembly的基本概念、常见问题及解决方案,包括路由配置、数据绑定、异步操作、状态管理和性能优化等方面的内容,并分享了一些易错点及如何避免的方法。希望这些内容能帮助你在Blazor WebAssembly开发中少走弯路,提高开发效率。
116 51
|
20小时前
|
开发框架 搜索推荐 算法
一个包含了 50+ C#/.NET编程技巧实战练习教程
一个包含了 50+ C#/.NET编程技巧实战练习教程
42 17
|
20小时前
|
缓存 算法 安全
精选10款C#/.NET开发必备类库(含使用教程),工作效率提升利器!
精选10款C#/.NET开发必备类库(含使用教程),工作效率提升利器!
24 11
|
1月前
|
开发框架 缓存 .NET
C# 一分钟浅谈:Blazor Server 端开发
Blazor Server 是基于 ASP.NET Core 的框架,允许使用 C# 和 Razor 语法构建交互式 Web 应用。本文介绍 Blazor Server 的基本概念、快速入门、常见问题及解决方案,帮助开发者快速上手。涵盖创建应用、基本组件、数据绑定、状态管理、跨组件通信、错误处理和性能优化等内容。
46 1
|
1月前
|
缓存 C# 开发者
C# 一分钟浅谈:Blazor Server 端开发
本文介绍了 Blazor Server,一种基于 .NET 的 Web 开发模型,允许使用 C# 和 Razor 语法构建交互式 Web 应用。文章从基础概念、创建应用、常见问题及解决方案、易错点及避免方法等方面详细讲解,帮助开发者快速上手并提高开发效率。
62 2
|
1月前
|
测试技术 Go C#
C#一分钟浅谈:ReSharper 插件增强开发效率
【10月更文挑战第25天】ReSharper 是 JetBrains 开发的一款 Visual Studio 插件,旨在提高 .NET 开发者的生产力。它通过代码分析、重构、导航等功能,帮助开发者避免常见错误,提升代码质量和开发效率。本文将通过具体代码案例,详细介绍 ReSharper 的常见功能及其应用。
46 1
|
1月前
|
C# Python
使用wxpython开发跨平台桌面应用,对wxpython控件实现类似C#扩展函数处理的探究
【10月更文挑战第30天】使用 `wxPython` 开发跨平台桌面应用时,可以通过创建辅助类来模拟 C# 扩展函数的功能。具体步骤包括:1. 创建辅助类 `WxWidgetHelpers`;2. 在该类中定义静态方法,如 `set_button_color`;3. 在应用中调用这些方法。这种方法提高了代码的可读性和可维护性,无需修改 `wxPython` 库即可为控件添加自定义功能。但需要注意显式调用方法和避免命名冲突。
|
2月前
|
JSON C# 开发者
C#语言新特性深度剖析:提升你的.NET开发效率
【10月更文挑战第15天】C#语言凭借其强大的功能和易用性深受开发者喜爱。随着.NET平台的演进,C#不断引入新特性,如C# 7.0的模式匹配和C# 8.0的异步流,显著提升了开发效率和代码可维护性。本文将深入探讨这些新特性,助力开发者在.NET开发中更高效地利用它们。
44 1
|
2月前
|
开发框架 NoSQL MongoDB
C#/.NET/.NET Core开发实战教程集合
C#/.NET/.NET Core开发实战教程集合
|
2月前
|
XML 存储 安全
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
122 0