《C#零基础入门之百识百例》数据类型 -- 写默认值
Posted 陈言必行
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《C#零基础入门之百识百例》数据类型 -- 写默认值相关的知识,希望对你有一定的参考价值。
前言
本文属于C#零基础入门之百识百例系列文章。此系列文章旨在为学习C#语言的童鞋提供一套系统的学习路径。此系列文章都会通过【知识点】【练习题】的形式呈现。有任何问题,你都可以通过评论,私信等方式找到我,我会一对一解答你的问题。
系列文章目录:
《C#零基础入门之百识百例》 目录文章传送门
一,数据类型
C# 语言的数据类型分为值类型和引用类型。值类型包括整型、浮点型、字符型、布尔型、枚举型等;引用类型包括类、接口、数组、委托、字符串等。
从内存存储空间的角度而言,值类型的值是存放到栈中的,每次存取值都会在该内存中操作;引用类型首先会在栈中创建一个引用变量,然后在堆中创建对象本身,再把这个对象所在内存的首地址赋给引用变量。
1.1 值类型
C#值类型变量可以直接分配给一个值。它们是从类System.ValueType
中派生的。
下图列出了C#中值类型,分别从【类型,描述,取值范围,默认值】对其进行描述,如第一行:bool类型,表示布尔值,取值范围是True或False,其默认值为False。
上图看起来有点多,但是分类开来就很好记了:
-
布尔型:
bool
-
字符型:
char
-
浮点型:根据精度分为
float
:通常称为单精度
double
:通常称为双精度
decimal
:一般用于银行系统等精确数值处 -
整数型:整数型又分为有无符号两大类
无符号类:byte
,ushort
,uint
,ulong
有符号类:sbyte
,short
,int
,long
有无符号的区别就是无符号不能为负数。而有无符号中又根据位数分为四种不同类型,它们的默认值都是0。
值类型的特点:
- 不能从值类型派生新类型;
- 值类型不能包含 null 值;
- 每个值类型都具有一个初始化该类型的默认值的隐式默认构造函数。
1.2 引用类型
引用类型不包含存储在变量中的实际数据,但它们包含对变量的引用。
与值类型对比而言,它们指的是一个内存地址,使用多个变量是,引用类型可以指向一个内存地址。如果内存地址的数据由一个变量改变的,其他变量会自动反映这种值的变化。
C#内置的引用类型又:object、dynamic 和 string。
-
Object 对象类型
Object类型是C#中所有数据类型的终极基类。所以Object类型可以被分配任何其他类型(包括值类型,引用类型和自定义类型)的值。但是分配之前需要先进行类型转换。如:Object obj = 10;
Object 是 System.Object 类的别名。 -
Dynamic 动态类型
动态类型可以存储任何类型的值在动态数组类型变量汇总。这些类型检是在运行时发生的。语法:dynamic d = 10;
-
String 字符串类型
字符串类型是System.String
类的别名。它是对象类型(Object)的派生类。语法:string str = "Cznenya";
1.3 两者区别
值类型和引用类的对比:
- 值类型继承自System.ValueType,引用类型继承自System.Object。
- 从内存上看:值类型是存储在栈中,而引用类型是存储在堆中。
==>举例:栈相当于我们兜里的现金,堆相当于手机里的电子货币;进而值类型存取速度快(从兜里掏出来再放回兜里),引用类型存取速度慢(需要输入密码走第三方程序)。 - 从本质上看:值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用。
特别的:结构体是值类型,类和string是引用类型。
当一个值类型转换为引用类型时,则被称为装箱;当一个引用类型转换为值类型时,则被称为拆箱。
二,课后练习 – 写默认值
2.1 题目描述
代码写出来上面学习过的值类型,并试着写出其默认值。
2.2 参考代码
using System;
namespace BSBL
{
class Program
{
static void Main(string[] args)
{
// ---------------- 布尔型 ----------------
bool bo = true; // 默认值:False
Console.WriteLine("布尔值:" + bo);
// ---------------- 字符型 ----------------
char ch = '1'; // 默认值:'\\0'
Console.WriteLine("16 位 Unicode 字符:" + ch);
// ---------------- 浮点型 ----------------
float fl = 1.0f; // 默认值:0.0F
Console.WriteLine("32 位单精度浮点型:" + fl);
double dou = 1.0d; // 默认值: 0.0D
Console.WriteLine("64 位双精度浮点型:" + dou);
decimal de = '1'; // 默认值:0.0M
Console.WriteLine("128 位精确的十进制值:" + de);
// ---------------- 整数型 ----------------
byte by = 1; // 默认值:0
Console.WriteLine("8 位无符号整数:" + by);
sbyte sb = 1; // 默认值:0
Console.WriteLine("8 位有符号整数类型:" + sb);
uint ui = 1; // 默认值:0
Console.WriteLine("32 位无符号整数类型:" + ui);
int i = 1; // 默认值:0
Console.WriteLine("32 位有符号整数类型:" + i);
ushort us = 1; // 默认值:0
Console.WriteLine("16 位无符号整数类型:" + us);
short sh = 1; // 默认值:0
Console.WriteLine("16 位有符号整数类型:" + sh);
ulong ul = 1; // 默认值:0
Console.WriteLine("64 位无符号整数类型:" + ul);
long lo = 1; // 默认值:0
Console.WriteLine("64 位有符号整数类型:" + lo);
Console.ReadKey();
}
}
}
以上是关于《C#零基础入门之百识百例》数据类型 -- 写默认值的主要内容,如果未能解决你的问题,请参考以下文章
《C#零基础入门之百识百例》(六十三)结构体类型数组 -- 学生数据存储
《C#零基础入门之百识百例》(三十五)方法返回 -- 自守数
《C#零基础入门之百识百例》(八十)类型转换汇总 -- 数字转换/引用转换/ 装箱拆箱