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

news2024/12/27 0:03:23

一、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变量可以在声明时或在构造函数中更改。

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

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

相关文章

相机内参及其内参影响因素的几点思考

目录 理论推导之从相机坐标系到像素坐标系 机械参数对相机内参的影响 Resize与Crop对相机内参的影响 参考文献 理论推导之从相机坐标系到像素坐标系 相机内参的意义即从相机坐标系到像素坐标系的表达&#xff0c;其中共涉及到三个坐标系&#xff1a;相机坐标系、成像坐标系…

2023年【安全员-A证】报名考试及安全员-A证新版试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全员-A证报名考试是安全生产模拟考试一点通总题库中生成的一套安全员-A证新版试题&#xff0c;安全生产模拟考试一点通上安全员-A证作业手机同步练习。2023年【安全员-A证】报名考试及安全员-A证新版试题 1、【多选…

AIGC ChatGPT4 读取接口文件并进行可视化分析

数据分析的过程中,对数据文件进行可视化分析是每个数据分析师必备的技能。如下图数据源。 现在需要对各地区的销量进行汇总,使用Python来进行分析。 但是又不想写代码,或者不会Python代码,可以用ChatGPT4来帮我们完成代码的编写。 完整的Python代码: import pandas as p…

【深度学习实验】注意力机制(一):注意力权重矩阵可视化(矩阵热图heatmap)

文章目录 一、实验介绍二、实验环境1. 配置虚拟环境2. 库版本介绍 三、实验内容0. 理论介绍a. 认知神经学中的注意力b. 注意力机制&#xff1a; 1. 注意力权重矩阵可视化&#xff08;矩阵热图&#xff09;a. 导入必要的库b. 可视化矩阵热图&#xff08;show_heatmaps&#xff0…

Linux:补充一些常用命令

Linux&#xff1a;补充一些常用命令 1. free -h2. df -lh3. du -sh *4. uname -a5. which6. mvn install 编译打包7. find -name *.jar8. cd -9. nohup java -jar *.jar &10. ps -ef|grep java11. netstat -ntlp 1. free -h free 命令显示系统使用和空闲的内存情况&#x…

3DMAX森林树木植物插件ForestPackLite教程

3DMAX森林树木植物插件ForestPackLite教程 Forest Pack是世界上最受欢迎的散布插件。它提供了一个完整的解决方案来创建大面积的物体&#xff0c;从树木和植物到建筑、人群、骨料、地面覆盖物、岩石等等。如果你能为它建模&#xff0c;森林包就能把它分散开来。 无数工作室依靠…

windows排除故障工具pathping、MTR、sysinternals

pathping 基本上可以认为它是ping和tracert的功能合体。 pathping首先对目标执行tracert&#xff0c;然后使用ICMP对每一跳进行100次ping操作。 如图&#xff0c;是一个对8.8.8.8进行pathing操作。 MTR MTR是另一个多工具合体工具。 winmtr是mtr的windows版本。 这个工具…

数据分析思维与模型:群组分析法

群组分析法&#xff0c;也称为群体分析法或集群分析法&#xff0c;是一种研究方法&#xff0c;用于分析和理解群体内的动态、行为模式、意见、决策过程等。这种方法在社会科学、心理学、市场研究、组织行为学等领域有广泛应用。它可以帮助研究人员或组织更好地理解特定群体的特…

Java多线程核心技术第一阶段-Java多线程基础 02

接上篇&#xff1a;Java多线程核心技术第一阶段-Java多线程基础 01 3.3 清除中断状态的使用场景 this.interrupted()方法具有清除状态标志值的功能&#xff0c;借用此特性可以实现一些效果。 【示例3.3.1】在MyThread4线程中向list1和list2存放数据&#xff0c;基于单一职责原…

Docker中的RabbitMQ已经启动运行,但是管理界面打不开

文章目录 前言一、解决方法方法一方法二 总结 前言 肯定有好多小伙伴在学习RabbitMQ的过程中&#xff0c;发现镜像运行&#xff0c;但是我的管理界面怎么进不去&#xff0c;或者说我第一天可以进去&#xff0c;怎么第二天进不去了&#xff0c;为什么每次重新打开虚拟机都进不去…

Linux 基本语句_11_无名管道文件复制

父子进程&#xff1a; 父子进程的变量之间存在着读时共享&#xff0c;写时复制原则 无名管道&#xff1a; 无名管道仅能用于有亲缘关系的进程之间通信如父子进程 代码&#xff1a; #include <stdio.h> #include <unistd.h> #include <sys/types.h> #inc…

IDEA 搭建 SpringCloud 项目【超详细步骤】

文章目录 一、前言二、项目搭建1. 数据库准备2. 创建父工程3. 创建注册中心4. 服务注册5. 编写业务代码6. 服务拉取 一、前言 所谓微服务&#xff0c;就是要把整个业务模块拆分成多个各司其职的小模块&#xff0c;做到单一职责原则&#xff0c;不会重复开发相同的业务代码&…

HC-SR501传感器制作一个报警系统

接线图&#xff1a; 引脚连接&#xff1a; 1. 将 PIR 信号引脚连接到 arduino 数字 引脚 13。 2. 将 PIR V 引脚连接 到 arduino 5v 引脚。 3. 将 PIR GND 引脚连接到 arduino GND 引脚。 4. 将arduino数字 引脚12连接 到220欧姆电阻&#xff0c;并将该电阻连接到 LED V …

用户增长模型:3A3R策略模型

一、概述 A - A - A - R - R - R 增长模型&#xff0c;即3A3R策略模型&#xff0c;由海盗模型演变而来&#xff0c;是目前使用最多、适用范围最广的增长策略模型。原始的海盗模型由 Acquisition &#xff08;获客&#xff09;、 Activation &#xff08;活跃&#xff09;、 Re…

mfc140.dll是什么文件?如何修复mfc140.dll丢失的方法分享

​mfc140.dll丢失的原因 未正确安装Microsoft Visual C Redistributable&#xff1a;mfc140.dll是Visual C库的一部分&#xff0c;如果没有正确安装Visual C Redistributable&#xff0c;可能导致mfc140.dll丢失。 系统文件损坏&#xff1a;由于病毒感染、系统错误或其他原因…

Java面向对象(高级)-- 单例(Singleton)设计模式

文章目录 一、单例设计模式&#xff08;1&#xff09; 设计模式概述&#xff08;2&#xff09; 何为单例模式&#xff08;3&#xff09; 实现思路&#xff08;4&#xff09; 单例模式的两种实现方式1. 饿汉式2. 懒汉式3. 饿汉式 vs 懒汉式 &#xff08;5&#xff09; 单例模式的…

SQL零基础入门教程,贼拉详细!贼拉简单! 速通数据库期末考!(九)

UNION ALL UNION ALL 用于合并两个或多个 SELECT 语句的结果。 请注意&#xff0c;UNION ALL 合并的每个 SELECT 语句必须是查询相同数量&#xff0c;相同数据类型的字段&#xff0c;且顺序也必须一致。另外结果集中的列名总是等于 UNION ALL 中第一个 SELECT 语句中的列名。 …

PyQt(学习笔记)

学习资料来源&#xff1a; PyQt快速入门——b站王铭东老师 PyQt&#xff08;学习笔记&#xff09; Pycharm环境准备运行第一个程序QPushButtonQLabelQLineEdit调整窗口大小、位置、图标布局信号与槽PyQt引入多线程 Pycharm环境准备 新建环境——添加PyQt5模块——验证版本 如果…

视频封面:从视频中提取封面,轻松制作吸引人的视频

在当今的数字时代&#xff0c;视频已成为人们获取信息、娱乐和交流的重要方式。一个吸引人的视频封面往往能抓住眼球&#xff0c;提高点击率和观看率。今天将介绍如何从视频中提取封面&#xff0c;轻松制作吸引人的视频封面。 一、准备素材选择合适的视频片段 首先&#xff0…

光敏传感器模块(YH-LDR)

目录 1. YH-LDR模块说明 1.1 简介 1.2 YH-LDR 模块的引脚说明 1.3 LDR 传感器工作原理与输出特性 2. 使用单片机系统控制 YH-LDR 模块 2.1 通用控制说明 1. YH-LDR模块说明 1.1 简介 YH-LDR 是野火设计的光强传感器&#xff0c;使用一个光敏电阻作为采集源&#x…