当前位置: 首页 > news >正文

【C#】C#编程入门指南:构建你的.NET开发基础

文章目录

  • 前言:
  • 1. C# 开发环境 VS的基本熟悉
  • 2. 解决方案与项目的关系
  • 3. 编辑、编译、链接、运行
  • 4. 托管代码和CLR
    • 4.1 CLR:
    • 4.2 C# 代码第编译过程(两次编译的)
  • 5. 命名空间
  • 6. 类的组成与分析
  • 7. C# 的数据类型
    • 7.1 值类型
    • 7.2 引用类型
    • 7.3 变量
  • 8. 注释与帮助文档
  • 总结:

前言:

在当今的软件开发领域,C# 作为一种功能强大且广泛使用的编程语言,已经成为许多开发者的首选。它以其简洁的语法、强大的面向对象特性以及与.NET框架的紧密集成而闻名。本文旨在为初学者提供一个全面的C#学习指南,从开发环境的搭建到代码的编写、编译、运行,再到深入理解C#的核心概念,如托管代码、命名空间、类的结构、数据类型等。通过这篇文章,读者将能够建立起对C#编程基础的清晰认识,并为进一步的学习和实践打下坚实的基础。

1. C# 开发环境 VS的基本熟悉

创建项目(本质:生成一个文件夹 文件夹中存放的是项目开发中所需的代码文件等)
生成的文件含义:
.sln : 解决方案文件
.cs : 编写代码的源文件
.csproj : 工程文件
.config : 配置文件
.bin : 可执行文件 (应用程序文件)
.obj : 生成的可执行文件过程中的一些中间文件
Properties: 程序集的一些信息

2. 解决方案与项目的关系

解决方案:一个整体项目的解决办法对应的全局方案(广义上的项目)
项目(狭义上的项目)
关系:一个解决方案中可以包含多个项目
在这里插入图片描述

3. 编辑、编译、链接、运行

编辑:编写代码程序
编译:将你编写的代码翻译成机器能够运行(执行)的代码(二进制代码)
链接:将多个编译器编译的机器语言的代码链接合成一个exe文件的过程
运行:将exe文件中代码加载到内存中进行代码的执行过程

4. 托管代码和CLR

4.1 CLR:

CLR:公共语言运行库(公共语言运行时)Common Language RunTime
作用: 在应用程序启动的时候对其进行一个全方面的管理

4.2 C# 代码第编译过程(两次编译的)

  1. VS中自带一个编译器(csc.exe)编译成 exe/dll 文件(微软的中间语言 简称IL)

查看中间语言:

C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools

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

  1. 引用程序启动之后通过 CLR 中的 JIT 编译器,根据操作系统的不同产生不同的机器代码(X86 / X64)
  2. 流程图:

C#代码文件 -> IL -> 机器码

  1. CLR 中的组件:内存管理、异常处理、垃圾回收、JIT编译器、类加载器、CTS、CLS
  2. 托管代码和非托管代码:
  1. 托管代码:CLR管理之下运行的代码就是托管代码(如:.Net)
  2. 非托管代码: 根据不同操作系统直接产生对应的机器码(非 .Net)
  1. CTS 和 CLS:是CLR重要的组件

CTS 是通用类型系统:只要解决不同的语言间数据类型差异的问题。
CLS 是通过语言的规范,主要解决不同开发语言语法规范的问题。

举例:
C# 定义一个整型的变量 int x = 0;
VB 定义一个整型变量 integer x = 0;
在这里插入图片描述

5. 命名空间

命名空间的作用:划分区域方便管理
拿到命空间中的类:

  1. 同一项目下:using去找到它
// 1.系统提供的命名空间
// 2.自己去找到命名空间
using QHD.TestProject; // 合并101包房和102包房namespace QHD.TestProject1 // 101包房
{internal class Program{static void Main(string[] args){Class1 class1 = new Class1();}}
}
namespace QHD.TestProject // 102包房
{internal class Class1{}
}
  1. 不同项目下:先引用using
    在这里插入图片描述
namespace ConsoleApp1 
{public class Class2 // 改成public{}
}
using ConsoleApp1;

6. 类的组成与分析

  1. C# 是面向对象的编程方式。
  2. 解决方案->若干个项目->若干个类
  3. 举例
    一辆汽车(汽车类),(颜色、宽度、高度等等)属性。(播放音乐、辅助驾驶等等功能)方法。
  4. 类的组成部分:字段(配合属性/方法的使用的)、属性(获取数据)、方法(实现功能)
  5. 类的创建格式:访问修饰符、关键字、类的名称{ //组成部分 }
  6. 访问修饰符:internal(内部的)(默认)、public(公共的)
  7. 关键字:class
  8. 创建字段(成员变量):访问修饰符、数据类型、字段名称;
    访问修饰符:private(私有)、public(公共的)
  9. 创建属性:方位修饰符、数据类型、属性名称{ set;get }、访问修饰符:Public(公共的)
  10. 创建方法:访问修饰符、返回值、方法名(参数){ //类容 }
    访问修饰符:private(私有)、public(公共的)
namespace QHD.ClassAnalysis
{public class Class1{// 字段private string text = "我是字段";// 属性public string Text { set; get; } = "我是属性";// 方法public void Show(int x){// 内容}}
}

7. C# 的数据类型

7.1 值类型

  1. 整型:
    在这里插入图片描述

  2. 浮点型:
    在这里插入图片描述

  3. 字符型:
    在这里插入图片描述

  4. 布尔类型:
    在这里插入图片描述

  5. 日期类型:
    在这里插入图片描述

7.2 引用类型

类、数组、字符串都是属于引用类型,需要注意 String 类型在 C# 底层中是引用类型但是使用的式值类型的效果。

7.3 变量

  1. 什么是变量?
    变量就是内存地址的别名,也称之为字段,为了方便操作数据而存在的。
  2. 如何定义变量?
    利用以上的数据类型就可以定义变量了,比如定义一个 int 整型变量 int x = 30;
  3. 变量定义的作用域:
    成员变量(定义在类级别下)、局部变量(如定义在方法中)
  4. 变量名称的命名规范:
    首个单词小写,多个单词的情况下,其余的单词首字母大写
namespace QHD.ClassAnalysis
{internal class Program // 入口类(启动){// 成员变量static int testData = 0;static void Main(string[] args){// 1.定义一个int类型的变量int data = 0; // 局部变量(定义在方法中)// 写入到控制台当中Console.WriteLine(data);Test();// 停留显示Console.ReadLine();}static void Test(){testData = 10;Console.WriteLine(testData);}}
}

8. 注释与帮助文档

using System.Drawing;namespace QHD.AnnotationProject
{/// <summary>/// 入口类/// </summary>internal class Program{// 创建一个int类型变量,初始值为0private int intData = 0;// 创建一个String类型变量,初始值为空值private string stringData = ""; //Char ''// 创建一个float类型变量,初始值为0.0private float floatData = 0.0f;/// <summary>/// 创建一个颜色属性, 鼠标放上面按F1键可以看帮助文档/// </summary>public Color color { get; set; }/// <summary>/// 入口方法/// </summary>/// <param name="args"></param>static void Main(string[] args){}}
}

总结:

本文全面介绍了C#编程的基础知识,从VS开发环境的熟悉到解决方案与项目的关系,再到代码的编辑、编译、链接和运行过程。我们深入探讨了托管代码与CLR的工作原理,以及C#代码的两次编译过程。文章还详细解释了命名空间的作用和如何使用它们,以及类的基本组成和分析方法。此外,我们讨论了C#中的数据类型,包括值类型和引用类型,以及变量的定义和作用域。最后,文章还涉及了注释和帮助文档的编写,这对于代码的维护和可读性至关重要。通过这些内容的学习,读者不仅能够掌握C#编程的基础知识,还能够理解C#语言的设计哲学和编程范式,为成为一名优秀的C#开发者奠定基础。

相关文章:

【C#】C#编程入门指南:构建你的.NET开发基础

文章目录 前言&#xff1a;1. C# 开发环境 VS的基本熟悉2. 解决方案与项目的关系3. 编辑、编译、链接、运行4. 托管代码和CLR4.1 CLR&#xff1a;4.2 C# 代码第编译过程&#xff08;两次编译的&#xff09; 5. 命名空间6. 类的组成与分析7. C# 的数据类型7.1 值类型7.2 引用类型…...

[系统安全] PE文件知识在免杀中的应用

0x1 PE文件与免杀思路 基于PE文件结构知识的免杀技术主要用于对抗启发式扫描。 通过修改PE文件中的一些关键点来达到欺骗反病毒软件的目的。 修改区段名 1.1 移动PE文件头位置免杀 工具&#xff1a;PeClean SizeOfOptionalHeader字段来描述扩展头的大小&#xff0c;恒定值为…...

相机标定原理

相机标定原理 什么是相机标定相机畸变 什么是相机标定 为了确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系&#xff0c;需建立相机成像的几何模型&#xff0c;几何模型参数即为相机参数&#xff0c;求解相机参数的过程就是相机标定。 坐标系 **世界坐标…...

Linux基础开发工具使用

目录 1. 软件包管理器yum 1.1 概念介绍 1.2 更换镜像源&#xff08;可选&#xff09; 1.3 工具的搜索/查看/安装/卸载 1.4 优势 2. vim编辑器 2.1 vi和vim 2.2 三种常用模式和操作 2.3 配置vim 3. Linux编译器-gcc/g 4. Linux调试器-gdb 5. make和Makefile 6.…...

蓝牙PBAP协议及Android实现

文章目录 前言一、什么是PBAP协议&#xff1f;PBAP的关键功能 二、PBAP的工作流程PBAP流程 三、PBAP在Android实现关键步骤&#xff1a;1. 检查设备是否支持 PBAP 服务 2. 创建 PBAP 连接3. 发送 OBEX 请求4. 解析 vCard 数据数据存储与展示6. 性能优化建议7. 完整示例&#xf…...

Py之pymupdf:基于langchain框架结合pymupdf库实现输出每个PDF页面的文本内容、元数据等

Py之pymupdf:基于langchain框架结合pymupdf库实现输出每个PDF页面的文本内容、元数据等 目录 PyMuPDFLoader类 初始化 属性 方法 __init__(file_path, *, headers=None, extract_images=False, **kwargs) lazy_load() aload() alazy_load() load(**kwargs) load_and…...

LeetCode题解:17.电话号码的数字组合【Python题解超详细,回溯法、多叉树】,知识拓展:深度优先搜索与广度优先搜索

题目描述 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 1&#xff1a; 输入&#xff1a;digits "23" 输出…...

《JVM第10课》内存溢出(OOM)排查过程

文章目录 常用命令1. jps2. jconsole3. jstat4. jmap 工具1.jvisualvm 排查OOM的方法其实很简单很简单。 如果能找到拋OOM的日志&#xff0c;可以在日志里看到是哪一行抛出的OOM异常。如果找不到日志&#xff0c;那么处理方式是导出Java进程的内存快照&#xff0c;然后用工具查…...

Thinkphp6视图介绍

一.MVC MVC 软件系统分为三个基本部分&#xff1a;模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&#xff08;Controller&#xff09; ThinkPHP6 是一个典型的 MVC 架构 控制器—控制器&#xff0c;用于将用户请求转发给相应的Model进行处理&a…...

躺平成长-人工智能进行编程-(12)

躺平成长&#xff1a; 让每一个人在科技&#xff08;开源的网络/智能科技对于生活琐事的处理&#xff09;的帮助下&#xff0c;实现养生反卷&#xff0c;躺平成长。 开源竞争&#xff1a; 当你无法彻底掌握技术的时候&#xff0c;你就开源这个技术&#xff0c;形成技术依赖&a…...

计算机网络中的域名系统(DNS)及其优化技术

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 计算机网络中的域名系统&#xff08;DNS&#xff09;及其优化技术 计算机网络中的域名系统&#xff08;DNS&#xff09;及其优化…...

Matplotlib库中show()函数的用法

在Matplotlib库中使用show()函数是用于显示绘制的图形的函数。它将图形显示在屏幕上或保存到文件中。show()函数通常在绘制完图形后调用。 Matplotlib是一个用于绘制2D图形的Python库&#xff0c;它提供了丰富的绘图工具和函数&#xff0c;可以用于创建各种类型的图表&#xf…...

C#中object和dynamic

在C#中&#xff0c;object和dynamic都是用于存储不同类型值的类型&#xff0c;但它们之间存在一些关键的区别&#xff1a; object object是C#中的基元类型之一&#xff0c;是所有其他类型的最终基类。当你将一个值赋给object类型的变量时&#xff0c;编译器会执行装箱操作&am…...

Spring Cloud Eureka 服务注册与发现

Spring Cloud Eureka 服务注册与发现 一、Eureka基础知识概述1.Eureka两个核心组件2.Eureka 服务注册与发现 二、Eureka单机搭建三、Eureka集群搭建四、心跳续约五、Eureka自我保护机制 一、Eureka基础知识概述 1.Eureka两个核心组件 Eureka Server &#xff1a;服务注册中心…...

【WPF】Prism学习(三)

Prism Commands 1.复合命令&#xff08;Composite Commanding&#xff09; 这段内容主要介绍了在应用程序中如何使用复合命令&#xff08;Composite Commands&#xff09;来实现多个视图模型&#xff08;ViewModels&#xff09;上的命令。以下是对这段内容的解释&#xff1a; …...

1+X应急响应(网络)系统加固:

系统加固&#xff1a; 数据库的重要性&#xff1a; 数据库面临的风险&#xff1a; 数据库加固&#xff1a; 业务系统加固&#xff1a; 安全设备加固&#xff1a; 网络设备加固&#xff1a;...

使用 Grafana api 查询 Datasource 数据

一、使用grafana 的api 接口 官方API 二、生成Api key 点击 Administration -》Users and accss -》Service accounts 进入页面 点击Add service account 创建 service account 点击Add service account token 点击 Generate token , 就可以生成 api key 了 三、进入grafana…...

【电子设计】按键LED控制与FreeRTOS

1. 安装Keilv5 打开野火资料,寻找软件包 解压后得到的信息 百度网盘 请输入提取码 提取码:gfpp 安装526或者533版本都可以 下载需要的 F1、F4、F7、H7 名字的 DFP pack 芯片包 安装完 keil 后直接双击安装 注册操作,解压注册文件夹后根据里面的图示步骤操作 打开说明 STM…...

JMeter中添加请求头

在JMeter中添加请求头的步骤如下&#xff1a; 1.打开HTTP信息头管理器 &#xff1a; 首先&#xff0c;你需要进入JMeter的HTTP请求组件。这可以通过在HTTP请求测试元素上右键点击&#xff0c;然后选择“添加 > 配置元件 > HTTP信息头管理器”来完成。 2.添加新的请求头…...

VMD + CEEMDAN 二次分解,CNN-LSTM预测模型

往期精彩内容&#xff1a; 时序预测&#xff1a;LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较 全是干货 | 数据集、学习资料、建模资源分享&#xff01; EMD变体分解效果最好算法——CEEMDAN&#xff08;五&#xff09;-CSDN博客 拒绝信息泄露&#xff01;VMD滚动分…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...