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

news2024/12/21 19:29:38

总目录


前言

从创建并运行第一个控制台应用程序,快速入门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.coloradmin.cn/o/2263383.html

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

相关文章

创新实训——前端:配置问题及解决

在配置前端环境中,出现了一些问题: Error: The following dependencies are imported but could not be resolved: element-plus (imported by C:/Users/30753/Desktop/cxsx/Coarse-grained-information-processing-front/src/request.js) element-plus…

【解决方案】三方云仓与各电商平台的电子面单对接

为实现三方云仓与各电商平台的电子面单对接,您需要确保您的WMS(仓库管理系统)能够通过奇门接口(假设这是一个特定的API或中间件服务用于连接不同的系统)与各个电商平台进行数据交换。下面是一个简化的解决方案框架&…

属性描述符

什么是属性描述符 1 数据描述符 2 存取描述符 3 获取属性描述符 4 设置属性描述符 4.1 配置writable 4.2 配置configurable 4.3 configurable的特殊性 4.4 配置enumerable 5.同时设置多个属性的属性描述符 6.get和set的用法具体看访问器属性getter和setter帖子。 什…

PostgreSQL技术内幕21:SysLogger日志收集器的工作原理

0.简介 在前面文章中介绍了事务模块用到的事务日志结构和其工作原理,本文将介绍日志的另一个部分,操作日志,主要去描述SysLogger日志的工作原理,流程以及其中关键的实现:日志轮转,刷盘性能问题等&#xff…

Unity3D仿星露谷物语开发6之角色添加动画

1、目的 给角色添加素材中的动画,最终让角色动起来。 2、准备工作 当前的预设体中的Player对象还不够完善,需要删除掉再优化下。此时应当:Hierarchy中的Player对象切断和预设体的关联,同时删除Prefabs中的Player对象。 首先&a…

Go框架比较:goframe、beego、iris和gin

由于工作需要,这些年来也接触了不少的开发框架,Golang的开发框架比较多,不过基本都是Web"框架"为主。这里稍微打了个引号,因为大部分"框架"从设计和功能定位上来讲,充其量都只能算是一个组件&…

CS 144 check4: interoperating in the world

Lectures Note 略 Exercises 执行cmake --build build --target check_webget发现超出12s了。 1、回看check0的代码,似乎不需要关闭写入方向,于是注释掉(关键) 2、将request的变量类型从string转为string_view(顺手…

现代风格VUE3易支付用户控制中心

适用系统 彩虹易支付 技术栈 vitevue3elementuiplusphp 亮点 独立前端代码,扩展开发,不改动系统文件,不影响原版升级 支持功能订制 界面预览

go语言zero框架中启动脚本.sh的编写与配置

在Go语言项目中,编写启动脚本 (.sh 文件) 通常用于自动化启动Go程序、配置环境变量、执行一些初始化任务或处理不同环境下的配置。下面是编写和配置启动脚本的步骤。 ### 1. 基本的 .sh 启动脚本 假设你已经在 Go 中编写了应用程序并编译为二进制文件,启…

React,Antd实现文本输入框话题添加及删除的完整功能解决方案

最终效果就是实现该输入框: 添加话题时,话题自动插入到输入框前面多文本输入框左侧间距为话题的宽度多行文本时,第二行紧接开头渲染删除文本时,如果删除到话题,再次删除,话题被删除 首先构造div结构 cons…

坑人 C# MySql.Data SDK

一:背景 1. 讲故事 为什么说这东西比较坑人呢?是因为最近一个月接到了两个dump,都反应程序卡死无响应,最后分析下来是因为线程饥饿导致,那什么原因导致的线程饥饿呢?进一步分析发现罪魁祸首是 MySql.Data,这就让人无语了,并且反馈都是升级了MySql.Data驱动引发,接下…

(五)FT2232HL高速调试器之--三步实现STM32的VSCODE在线仿真工程搭建

对于单片机开发,rtthread studios 与 vscode,鱼与熊掌可以兼得否,其实是可以的,下面通过三个步骤,实现基于FT2232HL高速调试器的,stm32的VSCODE在线仿真工程的搭建。 1、软件下载与VSCODE插件安装配置 软…

【计算机网络】lab2 Ethernet(链路层Ethernet frame结构细节)

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀计算机网络_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2.…

鸿蒙项目云捐助第十讲鸿蒙App应用分类页面二级联动功能实现

鸿蒙项目云捐助第十讲鸿蒙App应用分类页面二级联动功能实现 在之前的教程中完成了分类页面的左右两侧的列表结构,如下图所示。 接下来需要实现左侧分类导航项的点击操作,可以友好的提示用户选择了哪一个文字分类导航项。 一、左侧文字分类导航的处理 …

数字IC后端零基础入门基础理论(Day1)

数字IC后端设计导入需要用到的input数据如下图所示。 数字后端零基础入门系列 | Innovus零基础LAB学习Day9 Netlist: 设计的Gate level(门级)网表。下图所示为一个计数器设计综合后的门级netlist。 从这个netlist中我们看到这个设计顶层的名字叫counte…

如何编译Opencv +ffmpeg linux 明明安装了ffmpeg但是opencv就是找不到

想要编译opencvffmpeg: 1.安装ffmpeg 随便位置(具体看ffmpeg 编译安装) 执行下面命令,其中/usr/local/ffmpeg/lib/pkgconfig是你实际的ffmpeg路径 export PKG_CONFIG_PATH$PKG_CONFIG_PATH:/usr/local/ffmpeg/lib/pkgconfig2.下载…

三维视频融合在数字孪生中的应用

一、在提升监控效率与决策准确性方面的应用 改善监控视角与理解:在数字孪生场景下,三维视频融合技术能够将监控视频与三维环境相结合。例如在城市安防、工业生产、大型活动等场景中,形成连续、实时、动态的三维全景拼接图。这解决了传统监控…

语音识别失败 chrome下获取浏览器录音功能,因为安全性问题,需要在localhost或127.0.0.1或https下才能获取权限

环境: Win10专业版 谷歌浏览器 版本 131.0.6778.140(正式版本) (64 位) 问题描述: 局域网web语音识别出现识别失败 chrome控制台出现下获取浏览器录音功能,因为安全性问题,需要在…

计算机网络-传输层 TCP协议(上)

目录 报头结构 TCP的可靠传输机制 核心机制一:确认应答 TCP的序号和确认序号 核心机制二:丢包重传 核心机制三:连接管理 建立连接-三次握手 断开连接-四次挥手 核心机制四:滑动窗口 数据包已经抵达, ACK被丢了 数据包就…

【Cadence射频仿真学习笔记】IC设计中电感的分析、建模与绘制(EMX电磁仿真,RFIC-GPT生成无源器件及与cadence的交互)

一、理论讲解 1. 电感设计的两个角度 电感的设计可以从两个角度考虑,一个是外部特性,一个是内部特性。外部特性就是把电感视为一个黑盒子,带有两个端子,如果带有抽头的电感就有三个端子,需要去考虑其电感值、Q值和自…