C#速览入门

C# & .NET

C# 程序在 .NET 上运行,而 .NET 是名为公共语言运行时 (CLR) 的虚执行系统和一组类库。 CLR 是 Microsoft 对公共语言基础结构 (CLI) 国际标准的实现。 CLI 是创建执行和开发环境的基础,语言和库可以在其中无缝地协同工作。
用 C# 编写的源代码被编译成符合 CLI 规范的中间语言 (IL)。 IL 代码和资源(如位图和字符串)存储在扩展名通常为 .dll 的程序集中。 程序集包含一个介绍程序集的类型、版本和区域性的清单。
执行 C# 程序时,程序集将加载到 CLR。 CLR 会直接执行实时 (JIT) 编译,将 IL 代码转换成本机指令。 CLR 可提供其他与自动垃圾回收、异常处理和资源管理相关的服务。 CLR 执行的代码有时称为“托管代码”。而“非托管代码”被编译成面向特定平台的本机语言。
.NET有多个实现

  • 起初是.NET Framework,已经不再更新了,这个只能在Windows上运行
  • 社区自己实现了一个MONO,可以跨平台使用
  • 微软后面自己也实现了一个.NET CORE,也支持跨平台。目前最新的稳定版本是.NET CORE 8

安装

安装一个Visual Studio即可

语法 & 基本数据类型

类C语法,代码段用大括号包裹,基本上跟C一模一样
采用类型声明进行变量初始化:

int a = 1;
for (int i = 0; i < 10; i++)
{if (i % 2 == 0){Console.WriteLine(i);}
}
while (true)
{Console.WriteLine("Infinite loop");
}
do{Console.WriteLine("Do you want to continue? (yes/no)");string answer = Console.ReadLine();if (answer == "no"){break;}
} while (true);switch(teststring){case "This is a test string":Console.WriteLine("This is a test string");break;case "This is not a test string":Console.WriteLine("This is not a test string");break;default:Console.WriteLine("Default");break;
}

具体关键字可以看官方文档

数据类型

基本就那几样,需要注意的一点是C#是统一类型系统,所有的类型都是直接或者间接继承自object类型

  • 简单类型:
    • int,uint:有符号整数,无符号整数,4字节
    • float,double,decimal:分别是4字节和8字节,16字节
    • char:2个字节,存储单个Unicode UTF-16字符
  • 值类型:内部只有实例,没有引用的类型
    • 像上面的简单类型,就都是内置的值类型
    • 元组也是值类型,但是不是简单类型
  • 引用类型:内部包含对其他数据的引用的类型
    • string:是char序列的引用

这里就像effective c++中侯捷讲的一样,当设计一个引用类的时候,一定要仔细考虑实现它的复制函数以及析构函数,否则就有可能导致内存泄漏

装箱与取消装箱
由于C++中的类型都是继承于object,所以在使用时可以把任意类型的实例转换为object类型实例,这种行为称为装箱,将一个object实例特化为一个指定类型,称为取消装箱:

int i = 123;
// The following line boxes i.
object o = i; //装箱,是隐式的
i = (int)o;  // unboxing,是显式的

具体使用场景看官方文档

有个疑惑就是:不同的类型实例可能内存大小是不一样的,怎么处理呢?就比如装箱一个float,取消装箱为一个int类型,怎么办?好像官方文档里写到取消装箱时会检查装箱类型和取消装箱类型是否一致,可能装箱类型和取消装箱类型必须一致。

新建项目:

C#代码文件的后缀是.cs,可以自己建一个cs文件然后使用csc进行编译,也可以使用dotnet进行项目管理,dotnet就像C++中的cmake or Rust中的Cargo,可能更像Cargo一些哈哈。

dotnet new #新建一个项目,dotnet会提供很多类型的项目模板

在这里插入图片描述

console是最简单的命令行程序模板,写一个最简单的Helloworld,我们选这个就行。
dotnet生成的模板会自带一个helloworld,直接运行dotnet命令即可:

dotnet run # 编译并运行

我们也可以自己改一下:

static void Main()
{string name = "World";name = Console.ReadLine();Console.WriteLine($"Hello, {name}!");
}Main();

还可以改的更C#一点:

public class Program
{public static void Main() //编译时会自动把Main函数作为程序入口{string name = Console.ReadLine();Console.WriteLine($"Hello, {name}!");}
}

编程范式

C# 程序使用类型声明创建新类型。 类型声明指定新类型的名称和成员。 用户可定义以下六种 C# 类型:类类型、结构类型、接口类型、枚举类型、委托类型和元组值类型。
C#支持泛型编程,支持面向对象编程,支持lambda函数编程

namespace Acme.Collections;public class Stack<T>
{Entry _top;public void Push(T data){_top = new Entry(_top, data);}public T Pop(){if (_top == null){throw new InvalidOperationException();}T result = _top.Data;_top = _top.Next;return result;}class Entry{public Entry Next { get; set; }public T Data { get; set; }public Entry(Entry next, T data){Next = next;Data = data;}}
}

命名规范

对于类型名称、命名空间和所有公共成员,推荐使用PascalCase规范,即所有单词首字母大写,并且添加单下划线前缀
对于私有成员,或者局部变量,使用camelCase规范,即除了第一个单词以外的单词首字母大写
对于函数参数,使用cameCase规范
对于泛型类型参数尽量使用具有实际意义的名称而非单独字母,例如TaskType好于单独的T,除非单独字母也很容易理解
具体可以看官方文档:C#编码约定

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

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

相关文章

使用Python实现决策树算法

决策树是一种常用的机器学习算法&#xff0c;它可以用于分类和回归任务。在本文中&#xff0c;我们将使用Python来实现一个基本的决策树分类器&#xff0c;并介绍其原理和实现过程。 什么是决策树算法&#xff1f; 决策树是一种基于树形结构的机器学习算法&#xff0c;它通过…

GO - 泛型编程

go - 泛型编程 介绍 泛型即开发过程中编写适用于所有类型的模板&#xff0c;只有在具体使用的时候才能确定其真正的类型。随着Go 1.18版本的发布&#xff0c;泛型正式成为了Go语言的一部分。 在编写代码时&#xff0c;我们经常会遇到需要处理不同类型的数据的情况。传统上&am…

基于springboot实现教师人事档案管理系统项目【项目源码+论文说明】

基于springboot实现IT技术交流和分享平台系统演示 摘要 我国科学技术的不断发展&#xff0c;计算机的应用日渐成熟&#xff0c;其强大的功能给人们留下深刻的印象&#xff0c;它已经应用到了人类社会的各个层次的领域&#xff0c;发挥着重要的不可替换的作用。信息管理作为计算…

蓝桥杯备考随手记: BigInteger 和 BigDecimal

在Java中&#xff0c;BigInteger和BigDecimal是用来处理大整数和高精度浮点数的类&#xff0c;分别属于java.math包。 下面分别介绍这两个类的特点、用途和常用方法&#xff1a; BigInteger: 特点: BigInteger类表示任意精度的整数&#xff0c;可以处理比long型和int型更大范围…

asm磁盘组无法写入问题-处理中

有个11204的rac环境&#xff0c;没应用补丁&#xff0c;5号突然报归档满&#xff0c;登录环境后发现奇怪&#xff0c;一个1T磁盘建成的DATA磁盘组使用了近800G&#xff0c;读写正常&#xff0c;一个1.5T磁盘建成的FRA磁盘组&#xff0c;目前还剩余729551M&#xff0c;无法写入归…

SAP ABAP ALV转换例程的问题

为关键用户开发了一个ALV报表&#xff0c;因为导出Excel导致 curr性质的字段 例程的 问题 &#xff0c;使得负号后置&#xff0c;Excel不能直接运算&#xff0c;需要转换你成数值后才可以&#xff0c;经过调试发现是对应的域 的转换例程的问题 FUNCTION CONVERSION_EXIT_AC152_…

雷达学习之多普勒频率

一、多普勒频率如何产生&#xff1f; 雷达的原理是发射一些无线电脉冲来探测目标&#xff0c;并通过回波的延时来计算目标与雷达的距离&#xff0c;但当目标为运动物体时&#xff0c;在回波向目标传输的同时&#xff0c;目标也会远离或接近回波&#xff0c;所以会导致回波信号…

ctfshow web入门 文件包含 web151--web161

web151 打算用bp改文件形式(可能没操作好)我重新试了一下抓不到 文件上传不成功 改网页前端 鼠标右键&#xff08;检查&#xff09;&#xff0c;把png改为php访问&#xff0c;执行命令 我上传的马是<?php eval($_POST[a]);?> 查看 web152 上传马 把Content-Type改为…

【nnUNetv2实践】二、nnUNetv2快速入门-训练验证推理集成一条龙教程

nnUNet是一个自适应的深度学习框架&#xff0c;专为医学图像分割任务设计。以下是关于nnUNet的详细解释和特点&#xff1a; 自适应框架&#xff1a;nnUNet能够根据具体的医学图像分割任务自动调整模型结构、训练参数等&#xff0c;从而避免了繁琐的手工调参过程。 自动化流程&a…

C++流程控制语句:嵌套循环案例分析【九九乘法表】

在C++编程中,循环语句的嵌套是一种常见且强大的技术手段,它允许我们将多个循环结构相互嵌套,形成多维循环。不论是for循环、while循环还是do…while循环,均可以进行嵌套。 而在实践中,由于for循环具有明确的循环变量初始化、条件判断和更新机制,因此在嵌套循环中,for循…

封装单独的树操作栏组件

文章目录 概要整体架构流程 概要 把公共的部分单独拆出来&#xff0c;封装到一个新的vue文件夹中&#xff0c; 里面的数据通过父传子的方式传递&#xff0c;子通过props接受&#xff08;静态代码实现的树状图细看代码展示&#xff09; 整体架构流程 <template><!-- …

C语言第四十一弹---猜数字游戏

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 猜数字游戏 1、随机数生成 1.1、rand 1.2、srand 1.3、time 1.4、设置随机数的范围 2、猜数字游戏的分析和设计 2.1、猜数字游戏功能说明 2.2、猜数字游戏…

如何用Java后端处理JS.XHR请求

Touching searching engine destroies dream to utilize php in tomcat vector.The brave isn’t knocked down&#xff0c;turn its path to java back-end. Java Servlet Bible schematic of interaction between JS front-end and Java back-end Question 如何利用Java…

阿里巴巴Java开发MySQL 数据库 (整理版)

目录 前言 1.MySQL 数据库 1.1 建表规约 1.2 索引规约 1.3 SQL 语句 1.4 ORM 映射 前言 MySQL 数据库使用建议标识依次分为【重要】、【建议】、【参考】,有助于 MySQL 建表、索引、SQL 语句使用。 1.MySQL 数据库 1.1 建表规约 1.【重要】表达是与否概念的字段,必…

想创业在视频号开店,需要哪些条件,一篇详解!

大家好&#xff0c;我是电商糖果 视频号小店是2020年下半年才出现的平台&#xff0c;因为实在过于火爆&#xff0c;今年它就成了电商行业的黑马&#xff0c;吸引了不少商家入驻。 就是因为是新平台&#xff0c;网上关于它开店条件的说明并不多&#xff0c;官网上写的又太杂乱…

[C++][算法基础]最大异或对(Trie树)

在给定的 N 个整数 &#xff0c;...... 中选出两个进行 xor&#xff08;异或&#xff09;运算&#xff0c;得到的结果最大是多少&#xff1f; 输入格式 第一行输入一个整数 N。 第二行输入 N 个整数 ~ 。 输出格式 输出一个整数表示答案。 数据范围 1≤N≤, 0≤< 输…

【数据结构与算法】力扣 19. 删除链表的倒数第 N 个结点

题目描述 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a; head [1,2,3,4,5], n 2 输出&#xff1a; [1,2,3,5]示例 2&#xff1a; 输入&#xff1a; head [1], n 1 输出&#xff1a; []示例…

渗透测试漏洞之XSS漏洞

目录 1.1 XSS漏洞原理 1.2 XSS漏洞分类 1.3 XSS漏洞危害 1.4 XSS漏洞的防范 1.5 XSS各类别的区别 1.1 XSS漏洞原理 Cross-site Scripting&#xff0c;简称XSS 原理&#xff1a;就是程序对输入输出没有做合理的过滤限制&#xff0c;导致攻击者构造的字符输出到前端时被浏…

Mamba入局遥感图像分割 | Samba: 首个基于SSM的遥感高分图像语义分割框架

文章目录 1、导读 2、背景 3、动机 4、方法 5、实验 6、总结 标题&#xff1a;《Samba: Semantic Segmentation of Remotely Sensed Images with State Space Model》论文&#xff1a;https://arxiv.org/abs/2404.01705源码&#xff1a;https://github.com/zhuqinfeng1999…

在展会上如何介绍产品和公司,柯桥俄语培训

1.Приглашаем Вас… 邀请您…… 2. Позвольте пригласить Вас… 请允许邀请您…… 3.Имеем честь пригласить Вас … 诚挚邀请您…… 4. Посылаем Вам приглашение на… 给您&#xff0…