C#学习(第三篇)

简介: 在上篇文章中我们学习了C#基本语法、C#关键字以及C#数据类型,这次我将带着大家学习C#变量、C#数据类型转换以及C#运算符。

C#变量

变量可以理解为是我们程序可以操作的内存区域的名称,在 C# 中每个变量都有自己特定的类型,这个类型确定了变量所占内存的大小、布局、取值范围以及可以对该变量执行的操作。

可以将变量当作一种通过符号(变量名)表示某个内存区域的方法,变量的值可以更改,并且可以多次重复使用。C# 中的基本变量类型可以归纳为以下几种:

image.png

声明变量

C# 中声明变量的语法格式如下所示:

data_type variable_list;

其中,data_type 为变量的类型,可以是 C# 中任何有效的数据类型,例如 char、int、float 等,也可以是我们自定义的数据类型;variable_list 为要声明的变量名称(标识符),variable_list 中可以包含多个变量名称,每个变量名之间使用逗号进行分隔,这样我们就可以同时定义多个变量,如下所示:

int i, j, k;
double a;
char b, c;
float d;

C# 中变量的名称并不是可以随意定义的,需要遵循如下所示的规则:

变量名中可以包含英文字母a-z, A-Z、数字0-9和下划线_;

变量名只能以英文字母a-z, A-Z或下划线_开头,不能以数字开头;

变量名中不允许使用空格;

变量名不能是任何 C# 中的保留字或关键字,例如 char、float 等。

初始化变量

C# 中变量可以通过等号后跟一个常量表达式的形式进行初始化(赋值),语法格式如下:

variable_name = value;

也可以在变量声明时直接进行初始化,只需要在声明变量后使用等号后跟一个常量表达式即可,语法格式如下:

data_type variable_name = value;

下面通过一些简单的示例来演示一下变量的初始化:

int a, b, c;
a = 1;
b = 2;
c = 3;
char d = '';
float e = 3.14, f = 1.23;

注意:正确初始化变量是一种良好的编程习惯,否则程序运行时可能会产生意外的结果。

【示例】下面通过一个完整的示例来演示一下各种类型变量的声明和初始化:

using System;
namespace c.biancheng.net{
    class Program {
        static void Main(string[] args) {
            short a;
            int b ;
            double c;
            /* 初始化变量 */
            a = 10;
            b = 20;
            c = a + b;
            Console.WriteLine("a = {0}, b = {1}, c = {2}", a, b, c);
            Console.ReadLine();
        }
    }
}

编译并执行上述代码,运行结果如下:

a = 10, b = 20, c = 30

接受用户输入的值

上面的示例代码中我们使用到了一个名为 ReadLine() 的函数,它是由 System 命名空间中的 Console 类提供的,使用 ReadLine() 函数可以接受来自用户输入的内容并将其存储到变量中。

示例代码如下:

using System;
namespace c.biancheng.net{
    class Program {
        static void Main(string[] args) {
            int a, b;
            Console.WriteLine("请输入第一个数字:");
            a = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("请输入第二个数字:");
            b = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("{0}+{1}={2}", a, b, a+b);
        }
    }
}

因为使用 Console.ReadLine() 接收的数据是字符串格式的,所以示例中我们需要使用 Convert.ToInt32() 函数来将用户输入的数据转换为 int 类型。

C# 中的 Lvalues 和 Rvalues 表达式

C# 中有两种表达式,分别是 Lvalues 表达式和 Rvalues 表达式。Lvalues 和 Rvalues 一般是使用等号=进行分隔的,等号左边的叫 Lvalues, 等号右边的叫 Rvalues。

Lvalues:又称左值,左值表达式可以出现在赋值语句的左边或右边;

Rvalues:又称右值,右值表达式只可以出现在赋值语句的右边。

变量名是 Lvalues 的,所以可以出现在赋值语句的左边,而数值是 Rvalues 的,因此不能被赋值,不能出现在赋值语句的左边。下面就是一条有效的语句:

int age = 27;

而下面这条语句则是无效的,会导致编译错误:

123 = 321;

C#数据类型转换

数据类型转换就是将一种类型的数据转换为另一种类型,在 C# 中有两种形式的类型转换方式,分别是隐式类型转换和显示类型转换,下面就来详细介绍一下。

隐式类型转换

隐式类型转换是由 C# 以类型安全的方式执行的,转换的过程中不会导致数据丢失,例如从较小的整数类型(例如 int)转换到较大的整数类型(例如 long),从派生类转换为基类。

隐式转换不需要我们编写额外的代码,下例中演示了如何使用隐式类型转换的方式将 int 类型的数据转换成 double 类型:

int a = 10;
double b = a;

提示:一种数据类型(类型 A),只要其取值范围完全包含在另一种数据类型(类型 B)的取值范围内,那么类型 A 就可以隐式转换为类型 B。基于这一特性,C# 的隐式类型转换不会导致数据丢失。

显式类型转换

显式类型转换也叫强制类型转换,这种转换需要使用(type)value的形式或者预定义函数显式的完成,显式转换需要用户明确的指定要转换的类型,而且在转换的过程中可能会造成数据丢失,例如将 double 类型转换为 int 类型。

下面通过一个示例来演示一下显式类型转换:

using System;
namespace c.biancheng.net{
    class ExplicitConversion {
        static void Main(string[] args) {
            double d = 5673.74;
            int i;
            // 将 double 类型转换为 int
            i = (int)d;
            Console.WriteLine("转换前{0},转换后{1}", d, i);
            Console.ReadKey();
        }
    }
}

编译并执行上述代码,运行结果如下:

转换前5673.74,转换后5673

C# 中还提供了一系列内置的类型转换方法,如下表所示:

image.png

【示例】使用上面提供的方法,将各种类型的数据转换为字符串类型:

using System;
namespace c.biancheng.net{
    class StringConversion {
        static void Main(string[] args) {
            int i = 75;
            float f = 53.005;
            double d = 2345.7652;
            bool b = true;
            Console.WriteLine(i.ToString());
            Console.WriteLine(f.ToString());
            Console.WriteLine(d.ToString());
            Console.WriteLine(b.ToString());
            Console.ReadKey();
        }
    }
}

编译并执行上述代码,运行结果如下:

75

53.005

2345.7652 True

C#运算符

运算符其实就是一个符号,用来告诉编译器执行特定的数学或逻辑运算。C# 中内置了丰富的运算符,大致可以分为如下几类:

  • 算术运算符;
  • 关系运算符;
  • 逻辑运算符;
  • 位运算符;
  • 赋值运算符;
  • 其它运算符。

下面就来分别介绍一下这些运算符。

算术运算符

算术运算符即完成特定算术运算的符号,C# 中支持的算术运算符如下表所示:(假设变量 A = 10,变量 B = 20)

image.png

这里要重点说一下自增运算符和自减运算符,它们既可以放在变量的前面使用也可以放在变量的后面使用。在变量的前面时表示先进行自增或自减运算,然后再将值赋值给变量;在变量的后面时则正好相反,先将值赋给变量,然后再进行自增或自减运算。

下面通过示例来演示一下 C# 中算术运算符的应用:

using System;
namespace c.biancheng.net
{
    class Demo
    {
        static void Main(string[] args)
        {
            int a = 10;
            int b = 20;
            Console.WriteLine("a + b = {0}", a + b);
            Console.WriteLine("a - b = {0}", a - b);
            Console.WriteLine("a * b = {0}", a * b);
            Console.WriteLine("a / b = {0}", a / b);
            Console.WriteLine("a % b = {0}", a % b);
            Console.WriteLine("++a 的值是 {0}", ++a);
            a = 10; // 重新给变量 a 赋值
            Console.WriteLine("a-- 的值是 {0}", a--);
            Console.WriteLine("a 的值是 {0}", a);
            Console.ReadLine();
        }
    }
}

运行结果如下:

a + b = 30

a - b = -10

a * b = 200

a / b = 0

a % b = 10

++a 的值是 11

a-- 的值是 10

a 的值是 9

关系运算符

关系运算符用来比较运算符左右两边的操作数,下表列举了 C# 中支持的所有关系运算符:(假设变量 A = 10,变量 B = 20)

逻辑运算符

下表列举了 C# 中支持的逻辑运算符:(假设变量 A 的布尔值是 true,变量 B 的布尔值是 false)

image.png

下面通过示例来演示一下 C# 中逻辑运算符的使用:

using System;
namespace c.biancheng.net
{
    class Demo
    {
        static void Main(string[] args)
        {
            bool a = true;
            bool b = false;
            if (a && b){
                Console.WriteLine("(a && b) 条件为真");
            }else{
                Console.WriteLine("(a && b) 条件为假");
            }
            if (a || b){
                Console.WriteLine("(a || b) 条件为真");
            }else{
                Console.WriteLine("(a || b) 条件为假");
            }
            if (!(a && b)){
                Console.WriteLine("!(a && b) 条件为真");
            }else{
                Console.WriteLine("!(a && b) 条件为假");
            }
            Console.ReadLine();
        }
    }
}

运行结果如下:

(a && b) 条件为假

(a || b) 条件为真

!(a && b) 条件为真

位运算符

位运算符用来对二进制位进行操作,&、| 和 ^ 的真值表如下:

image.png

假设 A = 60,B = 13,它们的二进制格式和位运算结果如下:

A = 0011 1100

B = 0000 1101

A&B = 0000 1100

A|B = 0011 1101

A^B = 0011 0001

~A = 1100 0011

示例代码如下所示:

using System;
namespace c.biancheng.net
{
    class Demo
    {
        static void Main(string[] args)
        {
            int a = 60;            /* 60 = 0011 1100 */ 
            int b = 13;            /* 13 = 0000 1101 */
            int c = 0;         
            c = a & b;           /* 12 = 0000 1100 */
            Console.WriteLine("a & b 的值是 {0}", c );
            c = a | b;           /* 61 = 0011 1101 */
            Console.WriteLine("a | b 的值是 {0}", c);
            c = a ^ b;           /* 49 = 0011 0001 */
            Console.WriteLine("a ^ b 的值是 {0}", c);
            c = ~a;               /*-61 = 1100 0011 */
            Console.WriteLine("~a 的值是 {0}", c);
            c = a << 2;     /* 240 = 1111 0000 */
            Console.WriteLine("a << 2 的值是 {0}", c);
            c = a >> 2;     /* 15 = 0000 1111 */
            Console.WriteLine("a >> 2 的值是 {0}", c);
            Console.ReadLine();
        }
    }
}

运行结果如下:

a & b 的值是 12

a | b 的值是 61

a ^ b 的值是 49

~a 的值是 -61

a << 2 的值是 240

a >> 2 的值是 15

其他运算符

除了上面介绍的运算符之外,C# 中还支持一些其他的重要运算符,如下表所示:

image.png

下面通过示例来演示一下上述这些运算符的使用:

using System;
namespace c.biancheng.net
{
    class Demo
    {
        static void Main(string[] args){
            /* sizeof 运算符的实例 */
            Console.WriteLine("int 的大小是 {0}", sizeof(int));
            Console.WriteLine("short 的大小是 {0}", sizeof(short));
            Console.WriteLine("double 的大小是 {0}", sizeof(double));
            /* 三元运算符的实例 */
            int a, b;
            a = 11;
            b = (a == 1) ? 20 : 30;
            Console.WriteLine("b 的值是 {0}", b);
            b = (a == 11) ? 20 : 30;
            Console.WriteLine("b 的值是 {0}", b);
            Console.ReadLine();
        }
    }
}

运行结果如下:

int 的大小是 4

short 的大小是 2

double 的大小是 8

b 的值是 30

b 的值是 20

相关文章
|
6月前
|
C#
C#学习相关系列之数据类型类的三大特性(二)
C#学习相关系列之数据类型类的三大特性(二)
|
6月前
|
C#
C#学习相关系列之yield和return的区别
C#学习相关系列之yield和return的区别
|
6月前
|
Java 调度 C#
C#学习系列相关之多线程(一)----常用多线程方法总结
C#学习系列相关之多线程(一)----常用多线程方法总结
|
6月前
|
C#
C#学习相关系列之数组---常用方法使用(二)
C#学习相关系列之数组---常用方法使用(二)
|
6月前
|
存储 C#
C#学习系列相关之数组(一)---数组的定义与使用
C#学习系列相关之数组(一)---数组的定义与使用
|
4天前
|
Java 物联网 C#
C#/.NET/.NET Core学习路线集合,学习不迷路!
C#/.NET/.NET Core学习路线集合,学习不迷路!
|
1月前
|
开发框架 缓存 算法
开源且实用的C#/.NET编程技巧练习宝库(学习,工作,实践干货)
开源且实用的C#/.NET编程技巧练习宝库(学习,工作,实践干货)
|
6月前
|
C#
C#的基本语法结构学习
【5月更文挑战第17天】C#基础语法包括变量(如`int x = 10`)、常量(`const int MAX_VALUE = 100`)、运算符(如算术和比较运算符)、控制语句(if、for、while等)和函数声明(`int Add(int x, int y) { return x + y; }`)。这些构成C#程序的基本元素。
75 0
|
2月前
|
Linux C# 开发者
Uno Platform 驱动的跨平台应用开发:从零开始的全方位资源指南与定制化学习路径规划,助您轻松上手并精通 C# 与 XAML 编程技巧,打造高效多端一致用户体验的移动与桌面应用程序
【9月更文挑战第8天】Uno Platform 的社区资源与学习路径推荐旨在为初学者和开发者提供全面指南,涵盖官方文档、GitHub 仓库及社区支持,助您掌握使用 C# 和 XAML 创建跨平台原生 UI 的技能。从官网入门教程到进阶技巧,再到活跃社区如 Discord,本指南带领您逐步深入了解 Uno Platform,并提供实用示例代码,帮助您在 Windows、iOS、Android、macOS、Linux 和 WebAssembly 等平台上高效开发。建议先熟悉 C# 和 XAML 基础,然后实践官方教程,研究 GitHub 示例项目,并积极参与社区讨论,不断提升技能。
91 2
|
3月前
|
开发框架 .NET API
C#/.NET/.NET Core推荐学习书籍(24年8月更新)
C#/.NET/.NET Core推荐学习书籍(24年8月更新)