C#快速入门之变量与数据类型(二)

本文介绍了C#的基础知识,包括数据类型(值类型与引用类型,如简单类型、枚举、结构、类、接口等)、标识符规则、关键字的使用,以及变量的声明、初始化和作用域。此外,还讲解了常量的定义与使用,数据类型转换(自动和强制转换),并探讨了控制台输入/输出函数如Console.Read和WriteLine。最后,提到了命名空间的重要性和使用方式,以及如何通过using关键字简化代码。
摘要由CSDN通过智能技术生成

二: 数据类型与变量

2.1 数据类型

C# 有两种类型:值类型 和 引用类型。 值类型的变量直接包含它们的数据。 引用类型的变量存储对数据(称为“对象”)的引用。 对于引用类型,两个变量可以引用同一个对象;对一个变量执行的运算可能会影响另一个变量引用的对象。 借助值类型,每个变量都有自己的数据副本;因此,对一个变量执行的运算不会影响另一个变量(ref 和 out 参数变量除外)。

C# 的值类型进一步分为:简单类型、枚举类型、结构类型、可以为 null 的值类型和元组值类型。 C# 引用类型又细分为类类型、接口类型、数组类型和委托类型。

常见的基础数据类型如下表所示:
在这里插入图片描述

2.2 标识符

只要是语言,都会有标识符和关键字的概念,标识符必需满足以下几个条件:

  • 标识符必须以字母、下划线或 @ 开头,后面可以跟一系列的字母、数字( 0 - 9 )、下划线( _ )、@。
  • 标识符中的第一个字符不能是数字。
  • 标识符必须不包含任何嵌入的空格或符号,比如 ? - +! # % ^ & * ( ) [ ] { } . ; : " ’ / \。
  • 标识符不能是 C# 关键字。除非它们有一个 @ 前缀。 例如,@if 是有效的标识符,但 if 不是,因为 if 是关键字。
  • 标识符必须区分大小写。大写字母和小写字母被认为是不同的字母。
  • 不能与C#的类库名称相同。

** C#是大小写敏感的语言,定义的时候,尽量保留其意义,使其具有一定的自描述性。**

2.3 关键字

关键字是 C# 编译器预定义的保留字。这些关键字不能用作标识符,但是,如果您想使用这些关键字作为标识符,可以在关键字前面加上 @ 字符作为前缀。
在 C# 中,有些关键字在代码的上下文中有特殊的意义,如 get 和 set,这些被称为上下文关键字(contextual keywords)。
在这里插入图片描述

2.4 变量

C# 中变量定义的语法:

<data_type> <variable_list>;

:data_type 必须是一个有效的 C# 数据类型,可以是 char、int、float、double 或其他用户自定义的数据类型。variable_list 可以由一个或多个用逗号分隔的标识符名称组成。

eg:

int i, j, k;
char c, ch;
float f, salary;
double d;

【变量初始化方式】

  • 声明同时进行初始化

    int iNum = 100;
    
  • 先声明,后初始化

    int iNum;
    iNum = 100;
    
  • 用户输入初始化

    int iNum = Convert.ToInt32(Console.Read());
    //Convert.ToInt32(Console.ReadLine());
    

无全局变量

很遗憾! C#中不存在全局方法和变量,所有的变量和方法都包含在类的定义之中!这点与C、C++语言不同

局部变量

声明在函数体内的变量,称之为局部变量。

// // 文件名:Program.cs
// // 文件功能描述:

using System;

namespace MSN
{
    class MainClass
    {
       static  int Add(int num1, int num2)
        {

            int sum;//局部变量
            sum = num1 + num2;

            return sum;
        }

        public static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

2.5 常量

使用const关键字修饰的变量,称之为常量。

注意:

​ 常量需在声明的同时进行初始化,且只能初始化一次,程序运行期间,常量不能被修改。

定义一个常量的语法如下

const <data_type> <constant_name> = value;

eg:

public const int c_iNum = 5;

常量用途非常广泛,多用在项目开发中一些全局配置。比如游戏开发中的一些Tag与Layer的设置

2.6 数据类型转换

2.6.1 自动类型转换

自动类型转换,亦可称为隐式类型转换 ,这些转换是编译器自动进行的转换。 C# 默认的以安全方式进行的转换, 不会导致数据丢失。例如,从小的整数类型转换为大的整数类型,从派生类转换为基类。

eg:

int iNum = 1202;
float fNum = iNum;

2.6.2 强制类型转换

C#是强制类型语言,编译器会自动检测数据类型,如果不一致则会自动进行数据类型转换。如果不能隐式转换,则需要我们进行显示的转换。其方式有三种:

(1)使用强制类型转换运算符()

这种转换方式会发生数据丢失的情况,比如我们下面的例子,将整形转换位short类型,会丢失高位两个字节。高位全部是0的时候,你感觉不到错误。高位有1的时候,就会出现精度丢失导致数据不准确。

int ii=50;
//00000000 11111111 01010101 01010101
short ss=(short)ii;

(2)使用System.Convert类的静态成员方法,ToString,ToInt,ToDouble等等

int ii=10;
string str=System.Convert.ToString(ii);

string score = "100";
int scoreValue=System.Convert.ToInt32(score);

(3)使用.Net框架提供的Parse()方法

string ff = "200";
float f = float.Parse (ff);
Console.WriteLine (f);

2.7 控制台输入/输出函数

C# 控制台程序一般使用 .NET Framework Console 类提供的输入/输出服务。

【C#控制台输入/输出语句】

Console.Read()方法: 从控制台窗口读取一个字符,返回int值

Console.ReadLine()方法: 从控制台窗口读取一行字符,返回string值

Console.ReadKey()方法: 监听键盘事件,可以理解为按任意键执行

Console.Write()方法: 将制定的值写入控制台窗口,不换行

Console.WriteLine()方法: 将制定的值写入控制台窗口,并换行

class Program
{
    static void Main(string[] args)
    {
      		Console.WriteLine("请输入一个字符:");
            int ch = Console.Read();
            Console.WriteLine("\nch = {0}", ch);

            Console.WriteLine("请输入一行字符:");
            string str = Console.ReadLine();
            Console.WriteLine("str = {0}", str);

            //Console.ReadKey();

            Console.Write("One World, One Dream!");

            Console.WriteLine("Hello World!");
    }
}

2.8 namespace命名空间

命名空间的设计目的是提供一种让一组名称与其他名称分隔开的方式。在一个命名空间中声明的类的名称与另一个命名空间中声明的相同的类的名称不冲突。

​ 我们举一个计算机系统中的例子,一个文件夹(目录)中可以包含多个文件夹,每个文件夹中不能有相同的文件名,但不同文件夹中的文件可以重名。

​ 命名空间的定义是以关键字 namespace 开始,后跟命名空间的名称,如下所示:

namespace namespace_name
{
   // 代码声明
   class Person{
   }
}

​ 为了调用支持命名空间版本的函数或变量,会把命名空间的名称置于前面,如下所示:

	namespace_name.Person;	

using 关键字

using 关键字表明程序使用的是给定命名空间中的名称。例如,我们在程序中使用 System 命名空间,其中定义了类 Console。我们可以只写:

Console.WriteLine ("Hello there");

我们可以写完全限定名称,如下:

System.Console.WriteLine("Hello there");

​ 您也可以使用 using 命名空间指令,这样在使用的时候就不用在前面加上命名空间名称。该指令告诉编译器随后的代码使用了指定命名空间中的名称。

** Tip**

//第一种形式
namespace A{
	namespace B{
	
	}
}
//第二种形式
namespace A.B{

}

请思考这两种方式的区别在哪里?为什么?

2.9 本章总结

知识点回顾:

  • 变量以及常量定义
  • 命名空间的使用
  • 常见的基础数据类型
  • 数据类型转换几种方式
  • 输入输出的使用

本章练习

在屏幕上输入两个数,计算他们两者之间的和,并且输出计算结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值