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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

线性变换功能块S_RTI工程上的主要应用

西门子S_RTI模拟量转换功能块算法公式和代码介绍请参考下面文章链接: PLC模拟量输出 模拟量转换FC S_RTI-CSDN博客文章浏览阅读5.3k次,点赞2次,收藏11次。1、本文主要展示西门子博途模拟量输出转换的几种方法, 方法1:先展示下自编FC:计算公式如下:intput intput Real IS…

辅助笔记-Jupyter Notebook的安装和使用

辅助笔记-Jupyter Notebook的安装和使用 文章目录 辅助笔记-Jupyter Notebook的安装和使用1. 安装Anaconda2. conda更换清华源3. Jupter Notebooks 使用技巧 笔记主要参考B站视频“最易上手的Python环境配置——Jupyter Notebook使用精讲”。 Jupyter Notebook (此前被称为IPyt…

mysql的行列互转

mysql的行列互转 多行转多列思路实现代码 多列转多行思路代码 多行转多列 多行转多列&#xff0c;就是数据库中存在的多条具有一定相同值的行数据&#xff0c;通过提取相同值在列头展示来实现行数据转为列数据&#xff0c;一般提取的值为枚举值。 思路 转换前表样式 -> 转…

(动手学习深度学习)第13章 计算机视觉---微调

文章目录 微调总结 微调代码实现 微调 总结 微调通过使用在大数据上的恶道的预训练好的模型来初始化模型权重来完成提升精度。预训练模型质量很重要微调通常速度更快、精确度更高 微调代码实现 导入相关库 获取数据集 数据增强 定义和初始化模型 微调模型 训练模型

kaggle新赛:SenNet 3D肾脏分割大赛(3D语义分割)

赛题名称&#xff1a;SenNet HOA - Hacking the Human Vasculature in 3D 赛题链接&#xff1a;https://www.kaggle.com/competitions/blood-vessel-segmentation 赛题背景 目前&#xff0c;人类专家标注员需要手动追踪血管结构&#xff0c;这是一个缓慢的过程。即使有专家…

WSA子系统(一)

WSA子系统安装教程 Windows Subsystem for Android (WSA) 是微软推出的一项功能&#xff0c;它允许用户在 Windows 11 上运行 Android 应用程序。通过在 Windows 11 上引入 WSA&#xff0c;用户可以在其 PC 上轻松运行 Android 应用程序&#xff0c;从而扩展了用户的应用程序选…

Java内存结构

1.对象的结构 一个Java对象在内存中包括3个部分&#xff1a;对象头、实例数据和对齐填充 2.虚拟机存储数据的方式 2.1小端存储 : 便于数据之间的类型转换&#xff0c;例如:long类型转换为int类型时&#xff0c;高地址部分的数据可以直接截掉。 2.2大端存储 : 便于数据类型…

德迅云安全告诉您 网站被攻击怎么办-SCDN来帮您

随着互联网的发展给我们带来极大的便利&#xff0c;但是同时也带来一定的安全威胁&#xff0c;网络恶意攻击逐渐增多&#xff0c;很多网站饱受困扰&#xff0c;而其中最为常见的恶意攻击就是cc以及ddos攻击。针对网站攻击&#xff0c;今天为您介绍其中一种防护方式-SCDN&#x…

Zabbix实现故障自愈

一、简介 Zabbix agent 可以运行被动检查和主动检查。 在被动检查模式中 agent 应答数据请求。Zabbix server&#xff08;或 proxy&#xff09;询求数据&#xff0c;例如 CPU load&#xff0c;然后 Zabbix agent 返还结果。 主动检查处理过程将相对复杂。Agent 必须首先从 Z…

【算法每日一练]-分块(保姆级教程 篇1)POJ3648

插讲一下分块 题目&#xff1a;&#xff08;POJ 3648&#xff09; 一个简单的整数问题 前缀和往往用于静态的不会修改的区间和。遇到经常修改的区间问题&#xff0c;就要用分块或线段树来维护了。 分块算法是优化后的暴力&#xff0c;分块算法有时可以维护一些线段树维护不了的…

Michael Jordan最新报告:去中心化机器学习中的契约、不确定性和激励

‍ ‍导读 11月3日&#xff0c;智源研究院学术顾问委员会委员、机器学习泰斗Michael Jordan在以“新一代人工智能前沿”为主题的2023北京论坛 新工科专题论坛上&#xff0c;发表了题为Contracts, Uncertainty, and Incentives in Decentralized Machine Learning&#xff08;去…

RHCSA --- Linux存储管理

存储管理 Boot&#xff1a;可引导操作系统的分区&#xff08;必须是主分区&#xff09; 分区 ll /dev/nvme0n* 表示的是 nvme接口的磁盘 0n1 1 0n2 2 0n3 3 brw-rw----. 1 root disk 259, 0 Nov 15 19:31 /dev/nvme0n1 磁盘1 brw-rw----. 1 ro…

「Verilog学习笔记」根据状态转移图实现时序电路

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 这是一个典型的米利型状态机。三段式即可解决。 米利型状态机&#xff1a;即输出不仅和当前状态有关&#xff0c;也和输入有关。 其中ST0&#xff0c;ST1&#xff0c;ST3的…

FastJson竟然会导致内存泄露?你遇到过吗?

FastJson是一款性能优异的java序列化和反序列框架&#xff0c;广泛应用于日常开发工作中&#xff0c;也许正是因为作者在设计这款框架时&#xff0c;比较注重性能方面的考量&#xff0c;在框架安全性&#xff0c;空间占用等方面做了一些牺牲。 很不幸小编前两天就遇到了一个使…

文件重命名最佳实践:如何确保文件名的准确性和一致性

在日常生活和工作中&#xff0c;经常需要处理大量的文件&#xff0c;包括电子文件和纸质文件。文件重命名是为了更好地组织和管理这些文件&#xff0c;以方便查找和使用。然而&#xff0c;重命名文件并不是一件简单的事情&#xff0c;它需要遵循一定的最佳实践以确保文件名的准…

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

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

母婴服务预约小程序的效果如何

二胎家庭增速明显&#xff0c;占比较大&#xff0c;成为市场各母婴品牌的目标&#xff0c;而随着行业发展及市场变化&#xff0c;线上互联网深入人们生活&#xff0c;各家母婴品牌开始向“数字化”靠拢。 目前母婴门店商家主要面临服务/产品线上曝光不足、宣传度不够或扩圈无门…

JAVA小游戏 “拼图”

第一步是创建项目 项目名自拟 第二部创建个包名 来规范class 然后是创建类 创建一个代码类 和一个运行类 代码如下&#xff1a; package heima;import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import jav…

EDA实验-----4*4矩阵键盘与数码管显示测试

目录 一、实验目的 二、实验仪器设备 三、实验原理 四、实验要求 五、实验步骤 六、实验报告 七、实验过程 1.矩阵键盘按键原理 2.数码管原理 3.分频器代码 4.电路图连接 5.文件烧录 一、实验目的 了解数码管的工作原理&#xff1b;掌握4*4矩阵键盘和数码管显示的编…

UnitTest框架

目标&#xff1a; 1.掌握UnitTest框架的基本使用方法 2.掌握断言的使用方法 3.掌握如何实现参数化 4.掌握测试报告的生成 1.定义 &#xff08;1&#xff09;框架(framework)&#xff1a;为解决一类事情的功能集合。&#xff08;需要按照框架的规定(套路) 去书写代码&…