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

C#入门(1):程序结构、数据类型

一、C#程序结构

第一个C#程序

using System;namespace base_01
{class Program{#region  代码折叠块static void Main(string[] args){//控制台输出Console.WriteLine("Hello World!");Console.Write("C#是微软的编程语言");  //不换行输出//Console.ReadKey();  //控制台等待,VS2017之后的高版本不需要这句}#endregion}
}

代码说明:

(1)每个程序只能有一个Main方法,且使用static修饰;

(2)#region 代码折叠块, #endregion可以实现代码块折叠;

(3)C#需要引用命名空间,类似于C++添加头文件,命名空间里有相关类。例如Console是System名字空间里的类;

(4)控制台输出:C#使用Console.WriteLine在控制台输出文本,它可以输出各种数据类型的值,包括 stringintdouble 等。以下是一些常用的 Console.WriteLine 写法。

  1. 输出字符串:

    Console.WriteLine("Hello, World!");
    
  2. 输出变量的值:

    string name = "John";
    Console.WriteLine(name); // Outputs "John"
    
  3. 使用占位符输出变量的值:

    int age = 30;
    Console.WriteLine("I am {0} years old.", age); // Outputs "I am 30 years old."
    

    在这个例子中, {0} 是一个占位符,它会被 age 变量的值替换。

  4. 输出多个变量的值:

    string name = "John";
    int age = 30;
    Console.WriteLine("My name is {0} and I am {1} years old.", name, age); // Outputs "My name is John and I am 30 years old."
    
  5. 输出数值:

    Console.WriteLine(123); // Outputs "123"
    Console.WriteLine(123.45); // Outputs "123.45"
    
  6. 输出布尔值:

    Console.WriteLine(true); // Outputs "True"
    
  7. 输出对象的字符串表示(通常是通过调用对象的 ToString() 方法得到的):

    DateTime now = DateTime.Now;
    Console.WriteLine(now); // Outputs the current date and time
    
  8. $输出符
    C# 6.0 引入了一种新的字符串插值语法,允许在字符串中直接包含表达式。这种语法使用 $ 符号在字符串前面声明。表达式用 {} 包围,并直接在字符串中插入。

以下是一些使用 $ 进行字符串插值的例子:

string name = "John";
Console.WriteLine($"Hello, {name}!"); // Outputs "Hello, John!"int age = 30;
Console.WriteLine($"I am {age} years old."); // Outputs "I am 30 years old."double pi = Math.PI;
Console.WriteLine($"Pi is approximately {pi}."); // Outputs "Pi is approximately 3.14159265358979."DateTime now = DateTime.Now;
Console.WriteLine($"The current date and time is {now}."); // Outputs the current date and time

在这些例子中,{name}{age}{pi}{now} 是表达式,它们会被它们的值替换。

此外,你还可以在 {} 中包含复杂的表达式,甚至是格式字符串:

double pi = Math.PI;
Console.WriteLine($"Pi to 2 decimal places is {pi:F2}."); // Outputs "Pi to 2 decimal places is 3.14."

在这个例子中,:F2 是一个格式字符串,它指示 pi 的值应该以固定点数(即小数)的形式显示,并且小数部分应该有两位。

总的来说,Console.WriteLine 是一个非常灵活的方法,可以用来输出各种类型的数据,并且支持多种格式的输出。

二、C#代码注释

(1)3个斜线然后回车可以注释方法。
(2)2个斜线普通注释
(3)/**/多行注释

三、变量命名规则

​​在C#中,变量命名遵循一些基本规则和规范:

  1. 合法字符:变量名可以包含字母、数字和下划线。但是,变量名必须以字母或下划线开头,不能以数字开头。

  2. 区分大小写:C#是大小写敏感的编程语言,这意味着myVariableMyVariable在C#中会被视为两个不同的变量。

  3. 关键字:你不能使用C#的关键字(如intdoubleif等)作为变量名。如果你想用关键字作为变量名,可以在关键字前加上@符号,例如@int。但一般来说,这并不是一个好的做法。

  4. 长度:理论上,变量名的长度没有限制,但是为了代码的清晰性,最好保持变量名在合理的长度。

  5. 有意义的名称:变量名应该描述它所存储数据的内容或用途。使用有意义的变量名可以提高代码的可读性。

除了这些基本规则之外,还有一些命名规范通常在C#编程中被遵循:

  • PascalCase:在C#中,常量和类型名(如类名和枚举名)通常遵循PascalCase命名规范,即每个单词的首字母大写,例如MyClassMaxValue

  • camelCase:局部变量和方法参数通常遵循camelCase命名规范,即第一个单词的首字母小写,后续单词的首字母大写,例如myVariablemaxValue

这些规则和规范有助于保持代码的清晰性和一致性,尤其是在大型项目或团队工作中。

四、C# 数据类型

在C#中,数据类型被分为两种主要类型:值类型(Value types)和引用类型(Reference types)。这两种类型的主要区别在于它们存储和访问数据的方式。

在这里插入图片描述

值类型

值类型(Value types)直接包含数据。比如整数,浮点数,布尔值,字符和结构等。值类型的变量保存实际的数据值。当你把一个值类型的变量赋值给另一个值类型的变量时,实际上是复制了一份数据,两个变量可以独立变化,互不影响。

C#中的基本值类型有:

  • 整型: sbyte, byte, short, ushort, int, uint, long, ulong
  • 浮点型: float, double
  • 十进制类型: decimal
  • 布尔型: bool
  • 字符型: char
  • 结构型: struct, enum

示例代码

下面是一些示例代码:

int number = 10; // 整型
float rate = 4.5f; // 浮点型
bool flag = true; // 布尔型
char letter = 'A'; // 字符型
decimal price = 19.95m; // 十进制类型// 枚举(enum)
enum Days { Sun, Mon, Tue, Wed, Thu, Fri, Sat };// 结构(struct)
struct Point
{public int X;public int Y;
}

enum用法

假设我们有一个表示一周中的天的枚举,并且我们在一个名为Schedule的类中使用这个枚举。我们可以创建一个方法来输出今天是星期几:

public enum DayOfWeek
{Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday
}public class Schedule
{public DayOfWeek Day { get; set; }public void PrintDay(){Console.WriteLine($"Today is {Day}.");}
}

在上述代码中,Schedule类有一个Day属性,其类型为DayOfWeek枚举。PrintDay方法会输出Day的值。

然后,你可以在Main方法中创建一个Schedule对象,并测试这个方法:

class Program
{static void Main(){Schedule schedule = new Schedule();schedule.Day = DayOfWeek.Monday;schedule.PrintDay();  // Outputs "Today is Monday."schedule.Day = DayOfWeek.Friday;schedule.PrintDay();  // Outputs "Today is Friday."}
}

在这个例子中,我们首先设置DayDayOfWeek.Monday,然后调用PrintDay方法,它会输出"Today is Monday.“。然后我们将Day改为DayOfWeek.Friday,并再次调用PrintDay方法,它会输出"Today is Friday.”。

decimal用法

decimal 是C#中用于存储十进制数的数据类型。它是一种值类型,通常用于需要高精度的数值运算,比如财务计算和货币计算。decimal 类型的范围是±1.0 x 10^-28 至 ±7.9228 x 10^28。同时,它可以存储最多28位的小数,这比其他任何浮点数据类型都要精确。

创建并初始化一个 decimal 变量的语法如下:

decimal price = 19.95m; 

注意,我们在数值后面添加了 m 或者 M 后缀,这是声明 decimal 类型变量的必要语法。

decimal 类型支持以下运算符: +, -, *, /, %。以下是一些例子:

decimal price = 19.95m;
decimal discount = 0.15m; // 15% discount
decimal discountedPrice = price - (price * discount); // Calculate discounted price

decimal 类型也支持比较操作符,如 ==, !=, <, >, <=, >=。例如:

decimal price1 = 19.95m;
decimal price2 = 20.00m;if (price1 < price2)
{Console.WriteLine("price1 is less than price2.");
}

总的来说,decimal 类型是C#中最精确的数值类型,它非常适合用于需要精确计算的场合,尤其是在计算财务数据时。

引用类型

引用类型(Reference types)不直接包含数据;相反,它们包含对内存位置的引用,这个内存位置包含实际数据。这意味着当你把一个引用类型的变量赋值给另一个引用类型的变量时,实际上是复制了引用,两个变量指向同一个内存位置,改变其中一个变量会影响到另一个变量。

C#中的基本引用类型有:

  • 类(Class)
  • 接口(Interface)
  • 委托(Delegate)
  • 数组

下面是一些示例代码:

// 类(Class)
class MyClass
{public int Number;public string Name;
}// 接口(Interface)
interface IMyInterface
{void MyMethod();
}// 委托(Delegate)
delegate void MyDelegate(int x);// 数组
int[] numbers = new int[5];

这就是C#中的基本数据类型,值类型和引用类型的介绍和代码示例。

五、const与readonly

const用法

在C#中,const关键字用于声明常量,即它的值在定义后不能更改。const字段或局部变量必须在声明时赋值,而且值必须是编译时常量。

以下是一些使用const声明常量的例子:

const int MyIntConstant = 10;
const double MyDoubleConstant = 3.14;
const string MyStringConstant = "Hello, World!";

在这些例子中,MyIntConstantMyDoubleConstantMyStringConstant都被声明为常量,并在声明时被赋予值。这些值在后续的代码中不能被更改。

值得注意的是,const关键字只能用于值类型(如intdoublebool等)和字符串类型。对于引用类型(如类和数组),你不能使用const,但可以使用readonly关键字来创建其值不能更改的变量。

总的来说,const关键字提供了一种方式来创建在编译时已知并且在程序运行时不会改变的值。这对于定义像数学常数(如π)或者固定的配置值等不会改变的值非常有用。

readonly

readonly关键字用于声明在对象的生命周期内其值不会改变的字段。readonly字段可以在声明时或在构造函数中初始化。readonly可以应用于任何类型,包括用户定义的类和结构,也可以应用于数组(但是,虽然不能更改数组引用,但可以更改数组元素)。

例如:

public class MyClass
{public readonly int MyField;public MyClass(int value){MyField = value;}
}

在这个例子中,MyField在构造函数中被初始化,然后在对象的生命周期内其值不会改变。

总结一下,constreadonly都用于创建不能更改的变量,但它们的主要区别在于:

  • const变量的值必须在编译时就知道,而readonly变量的值可以在运行时确定。
  • const只能用于值类型,枚举类型,stringnull,而readonly可以用于任何类型。
  • const变量总是静态的,而readonly变量可以是静态的也可以是实例的。
  • const变量在定义后就不能更改,而readonly变量可以在声明时或在构造函数中更改。

相关文章:

C#入门(1):程序结构、数据类型

一、C#程序结构 第一个C#程序 using System;namespace base_01 {class Program{#region 代码折叠块static void Main(string[] args){//控制台输出Console.WriteLine("Hello World!");Console.Write("C#是微软的编程语言"); //不换行输出//Console.Rea…...

Scala---元组

1、元组定义 与列表一样&#xff0c;与列表不同的是元组可以包含不同类型的元素。元组的值是通过将单个的值包含在圆括号中构成的。 2、创建元组与取值 val tuple new Tuple&#xff08;1&#xff09; 可以使用newval tuple2 Tuple&#xff08;1,2&#xff09; 可以不使…...

【Linux】冯诺依曼体系结构、操作系统、进程概念、进程状态、环境变量、进程地址空间

目录 一、冯诺依曼体系结构二、操作系统(OS)1. 操作系统是什么2. 操作系统如何做管理3. 系统调用和库函数概念 三、进程1. 进程是什么&#xff1f;2. 描述进程-PCB3. 查看进程的方法 四、进程状态1 运行、阻塞和挂起状态2 Linux中的进程状态 五、进程优先级1. 什么是优先级2.查…...

【hive-解决】HiveAccessControlException Permission denied: CREATEFUNCTION

文章目录 一.任务描述二. 解决 一.任务描述 Error while compiling statement: FAILED: HiveAccessControlException Permission denied: Principal [nameroot, typeUSER] does not have following privileges for operation CREATEFUNCTION [ADMIN PRIVILEGE on INPUT, ADMIN…...

内网穿透的应用-通过内网穿透快速搭建公网可访问的Spring Boot接口调试环境

文章目录 前言1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 windows系统2.1.2 linux系统 2.2 创建隧道映射本地端口2.3 测试公网地址 3. 固定公网地址3.1 保留一个二级子域名3.2 配置二级子域名3.2 测试使用固定公网地址…...

解决 uniapp 开发微信小程序 不能使用本地图片作为背景图 问题

参考博文&#xff1a;uniapp微信小程序无法使用本地静态资源图片(背景图在真机不显示)的解决方法_javascript技巧_脚本之家 问题&#xff1a;uniapp 开发微信小程序&#xff0c;当使用本地图片作为 background-image 时&#xff0c;真机无法显示 解决&#xff1a; 方法一&am…...

常用中间件封装思路粗记

MQ 自定义注解 &#xff0c;编写配置类在bean属性初始化SmartInitializingSingleton#afterSingletonsInstantiated后至处理器 去扫描有自定义注解的bean&#xff0c;去创建对应消费者的容器 并启动消费者容器类主要组件DefaultMQPushConsumer SmartInitializingSingleton#afte…...

探索SPI:深入理解原理、源码与应用场景

文章目录 一、初步认识1、概念2、工作原理3、作用场景 二、源码分析1、ServiceLoader结构2、相关字段3、核心方法 三、案例connector连接器小案例1、新建SPI项目2、创建扩展实现项目1-MongoDB3、创建扩展实现项目2-Oracle4、测试 Spring应用1、创建study工程2、创建forlan-test…...

Web3名词解释

Web3名词解释 以太坊 ERC20 Defi去中心化金融 Defi是Decentralized Finance的英文缩写。 简单理解点就是与传统的高度中心化金融体系相比&#xff0c;去中心化金融是通过区块链技术&#xff0c;比如基于区块链技术开发的手机钱包软件&#xff0c;通过智能合约代码以实现去除…...

Vatee万腾外汇市场新力量:vatee科技决策力

在当今数字化时代&#xff0c;Vatee万腾崭露头角&#xff0c;以其强大的科技决策力进军外汇市场&#xff0c;成为该领域的新力量。这一新动向将不仅塑造外汇市场的未来&#xff0c;也展现Vatee科技决策力在金融领域的引领作用。 Vatee万腾带着先进的科技决策力进入外汇市场&…...

【HarmonyOS开发】配置开发工具DevEco Studio

1、下载 注意&#xff1a; 1、安装过程中&#xff0c;一定要自定义安装位置&#xff0c;包比较大&#xff0c;包比较大&#xff0c;包比较大&#xff01;&#xff01;&#xff01; 2、可以将该工具添加到右键中&#xff0c;否则&#xff0c;如果你的项目不是HarmonyOS&#xff…...

探索亚马逊大语言模型:开启人工智能时代的语言创作新篇章

文章目录 前言一、大语言模型是什么&#xff1f;应用范围 二、Amazon Bedrock总结 前言 想必大家在ChatGPT的突然兴起&#xff0c;大家多多少少都会有各种各样的问题&#xff0c;比如&#xff1a;大语言模型和生成式AI有什么关系呢&#xff1f;大语言模型为什么这么火&#xf…...

zabbix-proxy分布式监控

Zabbix是一款开源的企业级网络监控软件&#xff0c;可以监测服务器、网络设备、应用程序等各种资源的状态和性能指标。在大型环境中&#xff0c;如果只有一个Zabbix Server来监控所有的节点&#xff0c;可能会遇到性能瓶颈和数据处理难题。 为了解决这个问题&#xff0c;Zabbi…...

springboot生成PDF,并且添加水印

/*** 导出调查问卷*/ApiLog("导出调查问卷")PostMapping("/print/{id}")ApiOperationSupport(order 23)ApiOperation(value "导出报告", notes "导出报告")public void print(PathVariable Long id, HttpServletResponse response…...

Tensorflow2.0:CNN、ResNet实现MNIST分类识别

以下仅是个人的学习笔记 &#xff0c;内容可能是错误 CNN&#xff1a; import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers# 导入数据 (x_train, y_train), (x_test, y_test) keras.datasets.mnist.load_data()# 数据预处理 x_tra…...

本地jar导入maven

一、通过dependency引入 1.1. jar包放置&#xff0c;建造lib目录 1.2. pom.xml文件 <dependency><groupId>zip4j</groupId><artifactId>zip4j</artifactId><version>1.3.2</version><!--system&#xff0c;类似provided&#x…...

数据结构与算法【堆】的Java实现

前言 之前已经说过堆的特点了&#xff0c;具体文章在数据结构与算法【队列】的Java实现-CSDN博客。因此直接实现堆的其他功能。 建堆 所谓建堆&#xff0c;就是将一个初始的堆变为大顶堆或是小顶堆。这里以大顶堆为例。展示如何建堆。 找到最后一个非叶子节点从后向前&…...

同创永益联合红帽打造一站式数字韧性解决方案

随着AI技术的快速兴起&#xff0c;IT技术已成为推动业务持续增长的重要驱动力&#xff0c;这要求企业不断尝试新事物&#xff0c;改变固有流程&#xff0c;加强IT技术与业务的合作&#xff0c;同时提升数字韧性能力&#xff0c;以实现业务目标。10月26日&#xff0c;红帽2023中…...

c++ call_once 使用详解

c call_once 使用详解 std::call_once 头文件 #include <mutex>。 函数原型&#xff1a; template<class Callable, class... Args> void call_once(std::once_flag& flag, Callable&& f, Args&&... args);flag&#xff1a;标志对象&#xf…...

【rosrun diagnostic_analysis】报错No module named rospkg | ubuntu 20.04

ubuntu20.04使用指令报错 现象 rosrun diagnostic_analysis export_csv.py my.bag -d ~/Desktop报错 Traceback (most recent call last): File "/opt/ros/noetic/lib/diagnostic_analysis/export_csv.py", line 40, in <module> import roslib; roslib.load_m…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...