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

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

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

相关文章

python表白程序,无法拒绝

# codinggbk import tkinter as tk import random import tkinter.messagebox as messagebox# 创建主窗口并隐藏 root tk.Tk() root.attributes(-alpha, 0) # 设置主窗口为不可见# 表白内容 message "做我女朋友好不好&#xff1f;"# 获取屏幕宽度和高度 screen_w…

linux网络——HTTPS加密原理

目录 一.HTTPS概述 二.概念准备 三.为什么要加密 四.常⻅的加密⽅式 1.对称加密 2.⾮对称加密 五.数据摘要&#xff0c;数字签名 六.HTTPS的加密过程探究 1.方案一——只使用对称加密 2.方案二——只使⽤⾮对称加密 3.方案三——双⽅都使⽤⾮对称加密 4.方案四——⾮…

设计模式(二)-创建者模式(2)-工厂模式

一、为何需要工厂模式&#xff08;Factory Pattern&#xff09;? 由于简单工厂模式存在一个缺点&#xff0c;如果工厂类创建的对象过多&#xff0c;使得代码变得越来越臃肿。这样导致工厂类难以扩展新实例&#xff0c;以及难以维护代码逻辑。于是在简单工厂模式的基础上&…

QFile文件读写操作QFileInFo文件信息读取

点击按钮选择路径&#xff0c;路径显示在lineEdit中 将路径下的文件的内容放在textEdit中 最后显示出来 &#xff01;file.atend()//没有读到文件尾就一直读 file.readline表示按行进行读 追加的方式进行写 要是重新写的话用file.open(QIODevice::write) 用QFileInFo来读取…

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

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

【MySQL--->用户管理】

文章目录 [TOC](文章目录) 一、用户管理表二、基本操作三、用户权限分配给用户某个数据库中某个表的某个权限. grant 权限 on 库.表名 to 用户名主机名. ![在这里插入图片描述](https://img-blog.csdnimg.cn/fe8eb171ef9343c3a09bd64d4f0db5c1.png)分配给用户某个数据库中全部表…

指南:关于帮助中心需要注意的一些细节

在现代商业环境中&#xff0c;帮助中心已经成为企业提供客户支持和解决问题的重要方式之一。然而&#xff0c;建立一个高效的帮助中心并不简单。除了选择合适的软件平台和工具之外&#xff0c;还需要注意一些细节&#xff0c;以确保能够真正帮助客户并提高客户满意度。 | 1.设计…

RobotFramework框架之导入自己打包的python程序(十五)

引言 RobotFramework自动化框架&#xff08;以下简称RF&#xff09;之前文章我们讲了通过import第三方的library&#xff08;RequestsLibrary等&#xff09;&#xff0c;在实际项目中第三方的包并不能满足我们的需要&#xff0c;此时我们可自己编写python模块&#xff08;.py文…

Adversarially Robust Neural Architecture Search for Graph Neural Networks

Adversarially Robust Neural Architecture Search for Graph Neural Networks----《面向图神经网络的对抗鲁棒神经架构搜索》 摘要 图神经网络&#xff08;GNN&#xff09;在关系数据建模方面取得了巨大成功。尽管如此&#xff0c;它们仍然容易受到对抗性攻击&#xff0c;这对…

Java读写Jar

Java提供了读写jar的类库Java.util.jar&#xff0c;Java获取解析jar包的工具类如下&#xff1a; import java.io.File; import java.io.IOException; import java.net.URL; import java.net.URLClassLoader; import java.util.Enumeration; import java.util.HashMap; import …

c盘清除文件

打开设置 搜索存储

STM32F4系列单片机GPIO概述和寄存器分析

第2章 STM32-GPIO口 2.1 GPIO口概述 通用输入/输出口 2.1.1 GPIO口作用 GPIO是单片机与外界进行数据交流的窗口。 2.1.2 STM32的GPIO口 在51单片机中&#xff0c;IO口&#xff0c;以数字进行分组&#xff08;P0~P3&#xff09;&#xff0c;每一组里面又有8个IO口。 在ST…