c#变量及数据类型全解析

 为什么要使用变量:

计算机使用内存来记忆计算时所使用的数据,所以内存存储数据时:

要先根据数据的需求(即类型)为它申请一块合适的空间,存储数据,采用二进制的方式存储数据(010101··· ···),

而变量就是内存地址的引用,形象的说:可通过内存中房间的别名(就是变量)找到数据存储的位置。

如何变量声明:

// 变量类型 变量名 = 数值;
int money = 100;
int money;
money = 100;
// 也可以连续声明
int money1, money2,money3;

变量的初始化:

在使用变量之前,必须对变量进行初始化,否则会报错:

变量分类:

(1)类变量:

在类中定义的变量,也叫成员变量,分为:

静态变量和实例变量:

static int x = 90; // 静态变量
int x = 40; // 实例变量

调用方式:

在外部来调用静态变量可以使用类名来调用,实例变量使用创建出来的实例来调用。

在内部可直接调用静态,而在内部调用实例变量时,需要先创建类的实例,然后才能调用:

namespace ConsoleApp2
{
    class Program
    {
        string str = "lxc";
        static string s = "hello";
        static void Main(string[] args) // Main 主入口方法
        {
            Console.WriteLine(s); // 静态变量可直接调用
            Program classIns = new Program();
            Console.WriteLine(classIns.str); // 通过实例来调用类中的实例变量 str
            Console.ReadLine();

        }
    }
}

(2)局部变量:

在类方法中的变量称为局部变量。

常量的使用:

定义:不能被改变的量,固定不变的。

分类:

(1)编译时常量 const - 也就是说在编译前必须要定义好(初始化)的常量,不接受动态改变,否则将会报错。

const int a = 1;

(2)运行时常量 readonly

可以在编译时定义,也可以在运行时定义:

(注意:readonly常量只能在类中定义,不能再Main方法或其他方法中定义!)

(静态只读常量,只能刚开始定义好,或者,在构造函数中去修改常量)

namespace ConsoleApp2
{
    class Program
    {
        static readonly double PI;
        // 在构造函数中 修改PI常量
        Program()
        {
            PI = 3.14;
        }
        static void Main(string[] args) // Main 主入口方法
        {
        }
    }
}

** 静态只读常量如果没有初始化直接使用会出现意外效果,如下:

定义了2个只读常量,输出n1时为0,原因是:只有在运行时常量才能被确定下,程序运行到n2 * 2 时,n2常量还未被定义,所以默认为0,导致最后输出结果为 0。

c#中预定义的数据类型:

三大类:值类型、引用类型、指针类型

1、值类型分:

   (1)整数类型(分很多,具体如下:)

   (2)浮点类型

   (3)decimal类型

   (4)布尔类型

   (5)字符类型

   (6)字符串类型

2、引用类型分:

   (1)object

   (2)dynamic

   (3)string

值类型:

所谓值类型就是:存储的是单个的值(变量是在栈里边进行分配的,因此效率高)

(1)简单类型:整数(int)、浮点(float)、实数、字符型(char ' ' 注意是单引号)、布尔(bool)

(2)复合类型:结构、枚举

引用类型:

类、接口、数组、委托

(1)值类型例子:

对age2改变并未影响到age。

整数类型:

补充:int  类型 的默认值 为 0。

浮点类型:

主要存储含有小数的数据。

将一个数值、小数强制指定为小数类型或double类型:

(如果一个小数后边没有加 f 或者 d,默认是double类型)

// 强制指定为float类型,后边加f或大写F
float a = 1.1f;
// 强制指定为double类型,后边加d或大写D
double b = 23d;

decimal类型:

decimal类型表示128位数据类型,它是一种精度更高的浮点类型,其精度可达到28位,取值范围为:

(通常在金融计算金额,财务方面,货币 会用到)

如果希望一个小数被当做成decimal类型使用,必须要使用后缀mM,如:

decimal money = 1.12m;
decimal money = 1.12M;

否则会提示错误:

布尔 bool 类型:

布尔类型主要用来表示true、false值,C#中定义布尔类型时,需要使用bool关键字。例如:

bool类型的默认值是false  ( bool赋值时只能赋值true或false )

bool a = true;

字符类型:(不常用,因为有string字符串类型)

(c#语言中,使用char/Char类定义字符,并且字符只能用单引号 - 注意书写的时候 是单引号)

只能定义单个字符,不能写多个字符 !!!!

char name = '吕';
// 或
Char name = '吕'

补充:

char类型实际上存储的是数字,所以把两个char变量加载一起也会得到有个数字(其类型为int),原因是隐式类型转换。。。

字符串类型:

(***** 必须使用双引号 ******)

下边类似于js中的模板字符串,这里暂时就叫 c#中的模板字符串吧。

输出:lxc, 今年20岁

补充:

(1)转义字符  \ ,在c#中如果想输出 \ 需要 \\ 再加一个反斜线(与js一样)。

(2)转义字符小技巧:

@

在字符串类型中如果想输出多个\ ,在字符串前边添加@符号即可,就不需要添加\\ 两个反斜线转义后边的反斜杠了:

 

补充:

(1)\a :当字符串中有 \a 且没有被转义时,输出时,你的电脑会发出一个铃声(有点意思,其实这是一个电脑警告声)

 string a = "lx\ac";
Console.WriteLine(a); // 电脑会发出 铃铃铃 ···声音

(2)在int类型中,数据初始化时,与数据库打交道,有时我们会把int型数据赋值为 null,但是如果直接赋值,肯定会报错,可以在int后边加上 一个问号:

(此问号是为数据库设计的)

int? number = null;

引用类型:

1、object

-> 对象(Object)类型
    对象(Object)类型 是 C# 中所有数据类型的终极基类Object 是 System.Object 类的别名。所以对象(Object)类型可以
被分配任何其他类型(值类型、引用类型、预定义类型或用户自定义类型)的值。但是,在分配值之前,需要先进行类型转换。

    装箱操作: 当一个值类型转换为对象类型时
    拆箱操作: 当一个对象类型转换为值类型时

    object obj;
    obj = 100; // 这是装箱

 

2、Dynamic类型

-> 动态(Dynamic)类型

可以存储任何类型的值在动态数据类型变量中,这些变量的类型检查是在运行时发生的

声明动态类型的语法:dynamic <variable_name> = value;

例如:dynamic d = 20;

动态类型与对象类型相似,但是对象类型变量的类型检查是在编译时发生的,而动态类型变量的 类型检查是在运行时发生的

3、字符串string类型

字符串(string)类型

允许您给变量分配任何字符串值,字符串(string)类型是 System.String 类的别名。

它是从 对象(Object)类型派生的,字符串(string)类型的值可以通过两种形式进行分配:引号和 @引号

例如: string str = "baidu.com";

一个 @引号字符串:@"baidu.com";

C# string 字符串的前面可以加 @(称作"逐字字符串")将转义字符(\)当作普通字符对待

比如: string str = @"C:\Windows"; 等价于:string str = "C:\\Windows";

用户自定义引用类型有:class、interface 或 delegate

小练习:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args) // Main 主入口方法
        {
            int age = 23; // 整数类型
            double total = 98340d; // double类型
            char sex = '男'; // 字符类型
            bool isValid = true; // bool类型
            Console.WriteLine("在线保险单");
            Console.WriteLine("年龄:" + age);
            Console.WriteLine("保险总额:" + total);
            Console.WriteLine("性别:" + sex);
            Console.WriteLine("是否有效:" + isValid);
            Console.ReadLine();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_42778001/article/details/108186051