C# 从控制台应用程序入门

总目录


前言

从创建并运行第一个控制台应用程序,快速入门C#。


一、新建一个控制台应用程序

控制台应用程序是C# 入门时,学习基础语法的最佳应用程序。

  • 打开VS2022,选择【创建新项目】
    在这里插入图片描述
  • 搜索【控制台】,选择控制台应用(.NET Framework) ,点击下一步
    在这里插入图片描述
  • 配置新项目:输入项目名称 和位置,点击【创建】即可。
    在这里插入图片描述
  • 创建完毕,得到如下项目结构和代码
    在这里插入图片描述
  • 编写代码
        static void Main(string[] args){Console.Write("Hello World");}
  • 点击运行按钮,运行程序
    在这里插入图片描述

  • 运行结果
    在这里插入图片描述

二、不要完美主义,带着疑问前进

你可能很好奇Console.Write("Hello World");这句代码的运行原理是什么?
甚至好奇 static void Main(string[] args) 是什么意思?
甚至好奇Program.cs 这个文件有什么用?

初学阶段,不要过多的纠结于某一行代码的原理或意义(指太纠结于底层的实现原理),只需要记住,在static void Main(string[] args) 的 那对 大括号{ } 中输入Console.Write("Hello World"); 就可以在‘黑框框’ 内输出 Hello World 即可。学会带着疑问前进,随着代码瞧得多了,敲得多了,有些疑问也会在实践中得到答案。

二、C# 注释

注释:顾名思义就是注解,解释的意思,一般用于解释某一段代码的逻辑或作用。
不参与代码的编译,对运行结果不产生影响。

  • C# 单行注释以 // 开头,持续到当前行的末尾。
        static void Main(string[] args){// 这是一行注释Console.WriteLine("你好!");}

运行结果只会打印出 你好!,而不会将 // 后的内容进行输出

  • C# 还支持多行注释。 多行注释以 /* 开头,以 */ 结尾。
        static void Main(string[] args){/*这是多行注释可以一次性注释多行             */Console.WriteLine("你好!");}

运行结果只会打印出 你好!,而不会将 /**/ 内的内容进行输出

三、编写代码注意事项

这是相较于其他的编程语言来对比的结果

  • 大括号 {} 是建议独占一行的
  • C# 代码是区分大小写的
  • 所有的语句和表达式必须以分号(;)结尾。
		// 区分大小写,如果 staic 该成 Static 就会无法运行static void Main(string[] args){   //大括号独占一行Console.WriteLine("你好!");  //这里 以 ; 结束}   //大括号独占一行

四、控制台常用代码

控制台应用程序是入门级的应用程序,一般常用的代码如下:

//输出
Console.Write("你好");//换行输出
Console.WriteLine("你好");
//以上代码主要用于在控制台输出信息//读取控制台输入的信息
Console.Read();
//读取控制台当前行输入的信息
Console.ReadLine();
//读取字符
Console.ReadKey();
//以上代码主要用于在控制读取输入的信息//接受用户输入的字符串,以换行结束
string s=Console.ReadLine();
  • 建议控制台应用程序代码以Console.ReadLine()Console.ReadKey()等结束
  • 因为早先的时候,控制台不以Console.ReadLine()Console.ReadKey()等结束否则代码走完,控制台的窗体就会关闭。如今变成了可以配置的项。
    在这里插入图片描述

五、程序结构

1. 概述

C# 程序由一个或多个文件组成。 每个文件均包含零个或多个命名空间。 一个命名空间包含类、结构、接口、枚举、委托等类型或其他命名空间。

  • C# 程序
    • 一个或多个文件
      • 零个或多个命名空间
        • 类、结构、接口、枚举、委托等类型或其他命名空间

下面的案例代码,展示了 基本的C# 程序结构

// A skeleton of a C# program
using System;
namespace YourNamespace
{class YourClass{}struct YourStruct{}interface IYourInterface{}delegate int YourDelegate();enum YourEnum{}namespace YourNestedNamespace{struct YourStruct{}}class Program{static void Main(string[] args){//Your program starts here...Console.WriteLine("Hello world!");}}
}
  • Main 就是方法,并且是个静态方法, 是程序的入口点,即程序从这里开始执行你所编写的代码
  • namespace 就是命令空间
  • using 在这里 表示 引用命名空间,如 using System; 表示引入System 命名空间
  • class 就是 类,class Program 就是 名为 Program 的类

2. Main 方法

  • Main 方法是 C# 应用程序的入口点。 Main 方法是应用程序启动后调用的第一个方法。

  • C# 程序中只能有一个入口点。如果多个类包含 Main 方法,必须使用 StartupObject 编译器选项来编译程序,以指定将哪个 Main 方法用作入口点。具体操作如下图所示:

在这里插入图片描述

六、C# 程序编译过程

1. .NET 与CLR

在这里插入图片描述

  • .NET 提供了一个称为公共语言运行时的运行时环境,它运行代码并提供使开发过程更轻松的服务。
  • CLR 是.NET 实现的一个组成部分。

2. CLR

  • CLR :全称 Common Language Runtime,公共语言运行时
  • CLR是通用语言架构(简称CLI)的微软实现版本
  • CLR是一个类似于JVM的虚拟机,为微软的.Net产品提供运行环境。CLR运行一种称为“通用中间语言”的字节码,这个是微软的通用中间语言实现版本。
  • 运行时提供如下优点:
    • 性能得到了改进。
    • 能够轻松使用用其他语言开发的组件。
    • 类库提供的可扩展类型。
    • 语言功能,如面向对象的编程的继承、接口和重载。
    • 允许创建多线程的可缩放应用程序的显式自由线程处理支持。
    • 结构化异常处理支持。
    • 自定义特性支持。
    • 垃圾回收(Garbage Collector),它能为你自动管理内存。
      • GC自动从内存中删除程序不再访问的对象
      • GC是程序员不再操心许多以前必须执行的任务,比如释放内存和检查内存泄漏。这可不是小特性,因为检查内存泄漏可能非常困难而且耗时。
    • 使用委托取代函数指针,从而增强了类型安全和安全性。

3. MSIL / CIL / IL

  • IL :中间语言
  • CIL:通用中间语言
  • MSIL:微软的通用中间语言实现版本

4. 托管代码和非托管代码

  • 使用面向运行时的语言编译器开发的代码称为托管代码。 托管代码具有许多优点,例如:跨语言集成、跨语言异常处理、增强的安全性、版本控制和部署支持、简化的组件交互模型、调试和分析服务等。
  • 在公共语言运行库环境的外部,由操作系统直接执行的代码。 非托管代码必须提供自己的垃圾回收、类型检查、安全支持等服务;

在这里插入图片描述

托管代码:为.NET框架编写的代码称为托管代码,需要CLR。
非托管代码:不在CLR控制之下运行的代码,比如Win32C/C++ DLL

5. 扩展

  • CLR上实际运行的并不是我们通常所用的编程语言(例如C#、VB等),而是一种字节码形态的“中间语言”。这意味着只要能将代码编译成这种特定的“中间语言”(MSIL),任何语言的产品都能运行在CLR上。

  • 微软已经为多种语言开发了基于CLR的编译器,这些语言包括:C++/CLI、C#、Visual Basic、F#、Iron Python、 Iron Ruby和IL。除此之外,其他的一些公司和大学等机构也位一些语言开发了基于CLR的编译器,例如Ada、APL、Caml、COBOL、Eiffel、Forth、Fortran、Haskell、Lexicon、LISP、LOGO、Lua、Mercury、ML、Mondrian、Oberon、Pascal、Perl、PHP、Prolog、RPG、Scheme、Smaltak、Tcl/Tk。

  • CLR为不同的编程语言提供了统一的运行平台,在很大程度上对上层开发者屏蔽了语言之间才特性差异。对于CLR来说,不同语言的编译器(Compiler)就相当于一个这种语言的代码审查者(Checker),所做的工作就是检查源码语法是否正确,然后将源码编译成CLR所需要的中间语言(IL)。所以编程语言对于CLR是透明的,也就是说CLR只知道IL的存在,而不知道IL是由哪种语言编译而来。

  • 有了公共语言运行时,就可以很容易地设计出对象能够跨语言交互的组件和应用程序。 CLR的这种“公共语言”的特性使得“多语言混合编程”成为可能,让APL开发人员可以使用自己熟悉的语言和语法来开发基于.Net的项目。当然,更重要的是,这种特性允许用不同的语言来开发同一个项目的不同模块,比如在一个项目中用Visual Basic开发UI、用APL开发财务相关的模块,而与数学计算有关的模块使用F#,充分利用这些语言的特性,将会得到意想不到的效果。

4. 编译过程

本结所用示例图来自 C#、.NET Framework、CLR的关系

  • (1)编译成CIL:.NET语言的编译器接受源代码文件,并生成名为程序集的输出文件。程序集可以是 exedll
    • 程序集里的代码并不是本机代码,而是一种名称为CIL(Common Intermediate Language,公共中间语言)的中间代码。
    • 程序集包含的信息中,包含下列项目:程序的CIL、程序中使用的类型的元数据、对其他程序集引用的元数据
      在这里插入图片描述
  • (2)编译成本机代码并执行:程序的CIL直到它被调用运行时才会被编译成本机代码。在运行时,CLR执行下面的步骤(如下图)
    • 检查程序集的安全特性
    • 在内存中分配空间
    • 把程序集中的可执行代码发送给实时(Just-in-Time)编译器,把其中的一部分编译成本机代码。

在这里插入图片描述

  • (3)编译和执行综述:无论原始源文件的语言是什么,懂遵循同样的编译和执行过程。
    在这里插入图片描述

结语

回到目录页: C# 知识汇总
希望以上内容可以帮助到大家,如文中有不对之处,还请批评指正。


参考资料:
官方 - C#文档
官方 - .NET 文档
C#、.NET Framework、CLR的关系

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

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

相关文章

猫咪睡眠:萌态背后的奥秘与启示

猫咪的睡眠,犹如一本充满趣味与奥秘的小书,每一页都写满了它们独特的习性与本能。 猫咪堪称 “睡眠大师”,睡眠时间之长令人咋舌,一天中大约有 12 - 16 个小时在梦乡中度过,幼猫和老年猫甚至能睡更久。它们似乎深谙放…

基于前端技术UniApp和后端技术Node.js的电影购票系统

文章目录 摘要Abstruct第一章 绪论1.1 研究背景与意义1.2 国内外研究现状 第二章 需求分析2.1 功能需求分析2.2 非功能性需求分析 第二章系统设计3.1 系统架构设计3.1.1 总体架构3.1.2 技术选型 3.2 功能架构 第四章 系统实现4.1 用户端系统实现4.1.1 用户认证模块实现4.1.2 电…

用adb命令给APP做压力测试,有什么不同?

压力测试 app做压力测试目的是模拟用户在使用软件时随意向软件发出指令,例如操作app的点击,滑动,返回等一系列随机事件,来检测app的承受能力 第一步:手机安装包需要待测的app 第二步:输入adb start-ser…

2023年西南大学数学建模C题天气预报解题全过程文档及程序

2023年西南大学数学建模 C题 天气预报 原题再现: 天气现象与人类的生产生活、社会经济、军事活动等方方面面都密切相关,大到国家,小到个人,都受到极端天气的影响。2022年6月,全球陆地地区出现了自1850年代末人类有系…

Android 10 Launcher3 删除谷歌搜索

命令行获取页面 手机处于launcher首页 adb shell dumpsys window | findstr mCurrentFocus 输出 mCurrentFocusWindow{9afb34d u0 com.android.launcher3/com.android.launcher3.Launcher} 找到源码路径 packages/apps/Launcher3/ Android10源码 搜索控件 grep -r -n Apps…

LabVIEW机械故障诊断中的传感器选择

在机械设备故障诊断中,传感器是关键设备,用于采集设备运行状态的各种数据。常见的传感器类型和选择方法如下: 1. 振动传感器 用于检测设备运行中的振动特征,常见于旋转机械和轴承故障诊断。 加速度传感器:检测高频振…

JVM和数据库面试知识点

JVM内存结构 主要有几部分:堆、栈、方法区和程序计数器 堆是JVM中最大的一块内存区域,用于存储对象实例,一般通过new创建的对象都存放在堆中。堆被所有的线程共享,但是它的访问时线程不安全的,通常通过锁的机制来保证线…

电子发票汇总改名,批量处理电子发票问题

今天给大家推荐一个财务方面工作的软件。可以帮你解决很多财务。发票方面的问题。 电子发票汇总改名 批量处理电子发票问题 这个软件安装之后。会在桌面上分成三个小软件,分别是修改单位信息、自定义命名规则和电子发票汇总改名。 你可以在这个软件里提取PDF或者of…

用 Python 从零开始构建 LLaMA 3

文章结尾有最新热度的文章,感兴趣的可以去看看。 本文是经过严格查阅相关权威文献和资料,形成的专业的可靠的内容。全文数据都有据可依,可回溯。特别申明:数据和资料已获得授权。本文内容,不涉及任何偏颇观点,用中立态度客观事实描述事情本身 文章有点长(字),期望您能坚…

移植 OLLVM 到 LLVM18,修复控制流平坦化报错

版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ 前言 把 OLLVM 移植到 LLVM18 后,发现 -fla(控制流平坦化)并不能正常使用。 关于移植过程可以参考这篇文章 【移植 OLLVM…

MyBatis通过注解配置执行SQL语句原理源码分析

文章目录 前置准备流程简要分析配置文件解析加载 Mapper 接口MapperAnnotationBuilder解析接口方法注解parseStatement 方法详解MapperBuilderAssistant 前置准备 创建一个mybatis-config.xml文件&#xff0c;配置mapper接口 <mappers><!--注解配置--><mapper…

入侵他人电脑,实现远程控制(待补充)

待补充 在获取他人无线网网络密码后&#xff0c;进一步的操作是实现入侵他人电脑&#xff0c;这一步需要获取对方的IP地址并需要制作自己的代码工具自动化的开启或者打开对方的远程访问权限。 1、获取IP地址&#xff08;通过伪造的网页、伪造的Windows窗口、hook&#xff0c;信…

mac 安装graalvm

Download GraalVM 上面链接选择jdk的版本 以及系统的环境下载graalvm的tar包 解压tar包 tar -xzf graalvm-jdk-<version>_macos-<architecture>.tar.gz 移入java的文件夹目录 sudo mv graalvm-jdk-<version> /Library/Java/JavaVirtualMachines 设置环境变…

[SZ901]JTAG高速下载设置(53Mhz)

SZ901最高支持JTAG 53MHz的时钟频率&#xff0c;下载bit文件和固化程序的速度提升非常明显。 首先设置参数 1&#xff0c;将JTAG0 分频系数修改为3 2&#xff0c;设置参数&#xff0c;更新参数。&#xff08;完成&#xff09; 打开VIVADO VIVADO 正常识别FPGA&#xff0c;速…

蓝桥杯刷题——day8

蓝桥杯刷题——day8 题目一题干解题思路代码 题目二题干解题思路代码 题目一 题干 N 架飞机准备降落到某个只有一条跑道的机场。其中第i架飞机在 Ti时刻到达机场上空&#xff0c;到达时它的剩余油料还可以继续盘旋 Di个单位时间&#xff0c;即它最早可以于 Ti时刻开始降落&am…

深度科普文:细数倾斜摄影数据的缺点

1. 引言 写这篇文章的起因是最近遇到一个使用倾斜摄影数据应标的三维可视化项目&#xff0c;业主认为倾斜摄影数据加载很卡&#xff0c;要求能浏览场景的时候能立刻显示出当前的场景最精细的模型&#xff0c;如下图1所示。其实这个问题遇到的次数还真不少&#xff0c;作为乙方…

React:闭包陷阱产生和解决

在 React 中&#xff0c;闭包陷阱是一个常见的问题&#xff0c;尤其是在处理异步操作、事件处理器、或是定时器时。理解闭包的工作原理以及它在 React 中如何与状态和渲染交互&#xff0c;可以帮助你避免陷入一些常见的错误。 一、闭包陷阱的产生 1、什么是闭包陷阱&#xff1…

【开源免费】基于SpringBoot+Vue.JS在线宠物用品交易网站(JAVA毕业设计)

本文项目编号 T 092 &#xff0c;文末自助获取源码 \color{red}{T092&#xff0c;文末自助获取源码} T092&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

【Git 常用操作:pull push】

Git 基本概念 Git 是一个先进的开源的分布式版本控制系统&#xff0c;常用于管理工作内容、项目代码等功能。 Git 工作流程 图片来源&#xff1a;https://www.runoob.com/git/git-basic-operations.html 说明&#xff1a; workspace&#xff1a;工作区staging area&#xff…

shell脚本的循环-----while和for循环

一、while 1.格式 while 条件表达式; do 命令 done 2.案例 &#xff1a; ping测试子网段的主机网段由用户输入&#xff0c;例如用户输入192.168.101 &#xff0c;则ping192.168.101.125 — 192.101.131 UP&#xff1a; /tmp/host_up.txt Down: /tmp/host_down.txt &#…