《C#零基础入门之百识百例》(二)数据类型 -- 写默认值

本文主要是介绍《C#零基础入门之百识百例》(二)数据类型 -- 写默认值,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

C#零基础入门 基础语法 -- 基础数据类型

  • 前言
  • 一,数据类型
    • 1.1 值类型
    • 1.2 引用类型
    • 1.3 两者区别
  • 二,课后练习 -- 写默认值
    • 2.1 题目描述
    • 2.2 参考代码

前言

本文属于C#零基础入门之百识百例系列文章。此系列文章旨在为学习C#语言的童鞋提供一套系统的学习路径。此系列文章都会通过【知识点】【练习题】的形式呈现。有任何问题,你都可以通过评论私信等方式找到我,我会一对一解答你的问题。


系列文章目录: 导图
《C#零基础入门之百识百例》 目录文章传送门

一,数据类型

C# 语言的数据类型分为值类型和引用类型。值类型包括整型浮点型字符型布尔型枚举型等;引用类型包括接口数组委托字符串等。

从内存存储空间的角度而言,值类型的值是存放到栈中的,每次存取值都会在该内存中操作;引用类型首先会在栈中创建一个引用变量,然后在堆中创建对象本身,再把这个对象所在内存的首地址赋给引用变量。

1.1 值类型

C#值类型变量可以直接分配给一个值。它们是从类System.ValueType中派生的。

下图列出了C#中值类型,分别从【类型,描述,取值范围,默认值】对其进行描述,如第一行:bool类型,表示布尔值,取值范围是True或False,其默认值为False。
请添加图片描述
上图看起来有点多,但是分类开来就很好记了:

  1. 布尔型: bool

  2. 字符型:char

  3. 浮点型:根据精度分为
    float:通常称为单精度
    double:通常称为双精度
    decimal:一般用于银行系统等精确数值处

  4. 整数型:整数型又分为有无符号两大类
    无符号类:byteushortuintulong
    有符号类:sbyteshortintlong

    有无符号的区别就是无符号不能为负数。而有无符号中又根据位数分为四种不同类型,它们的默认值都是0。

值类型的特点

  1. 不能从值类型派生新类型;
  2. 值类型不能包含 null 值;
  3. 每个值类型都具有一个初始化该类型的默认值的隐式默认构造函数。

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 两者区别

值类型和引用类的对比:

  1. 值类型继承自System.ValueType,引用类型继承自System.Object。
  2. 从内存上看:值类型是存储在栈中,而引用类型是存储在堆中。
    ==>举例:栈相当于我们兜里的现金,堆相当于手机里的电子货币;进而值类型存取速度快(从兜里掏出来再放回兜里),引用类型存取速度慢(需要输入密码走第三方程序)。
  3. 从本质上看:值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用。

特别的:结构体是值类型,类和string是引用类型。

当一个值类型转换为引用类型时,则被称为装箱;当一个引用类型转换为值类型时,则被称为拆箱


二,课后练习 – 写默认值

2.1 题目描述

代码写出来上面学习过的值类型,并试着写出其默认值。

2.2 参考代码

using System;namespace BSBL
{class Program{       static void Main(string[] args){// ---------------- 布尔型 ----------------bool bo = true; // 默认值:FalseConsole.WriteLine("布尔值:" + bo);// ---------------- 字符型 ----------------char ch = '1'; // 默认值:'\0'Console.WriteLine("16 位 Unicode 字符:" + ch);// ---------------- 浮点型 ----------------float fl = 1.0f; // 默认值:0.0FConsole.WriteLine("32 位单精度浮点型:" + fl);double dou = 1.0d; // 默认值: 0.0DConsole.WriteLine("64 位双精度浮点型:" + dou);decimal de = '1'; // 默认值:0.0MConsole.WriteLine("128 位精确的十进制值:" + de);           // ---------------- 整数型 ----------------byte by = 1;   // 默认值:0Console.WriteLine("8 位无符号整数:" + by);sbyte sb = 1;  // 默认值:0Console.WriteLine("8 位有符号整数类型:" + sb);uint ui = 1;   // 默认值:0Console.WriteLine("32 位无符号整数类型:" + ui);int i = 1;     // 默认值:0Console.WriteLine("32 位有符号整数类型:" + i);            ushort us = 1; // 默认值:0Console.WriteLine("16 位无符号整数类型:" + us);short sh = 1;  // 默认值:0Console.WriteLine("16 位有符号整数类型:" + sh);ulong ul = 1;  // 默认值:0Console.WriteLine("64 位无符号整数类型:" + ul);long lo = 1;  // 默认值:0Console.WriteLine("64 位有符号整数类型:" + lo);Console.ReadKey();}}
}

这篇关于《C#零基础入门之百识百例》(二)数据类型 -- 写默认值的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/705049

相关文章

Python基础文件操作方法超详细讲解(详解版)

《Python基础文件操作方法超详细讲解(详解版)》文件就是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位,文件的核心操作就是读和写,:本文主要介绍Python基础文件操作方法超详细讲解的相... 目录一、文件操作1. 文件打开与关闭1.1 打开文件1.2 关闭文件2. 访问模式及说明二、文件读写1.

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

详解C#如何提取PDF文档中的图片

《详解C#如何提取PDF文档中的图片》提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使用,下面我们就来看看如何使用C#通过代码从PDF文档中提取图片吧... 当 PDF 文件中包含有价值的图片,如艺术画作、设计素材、报告图表等,提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

C#如何动态创建Label,及动态label事件

《C#如何动态创建Label,及动态label事件》:本文主要介绍C#如何动态创建Label,及动态label事件,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#如何动态创建Label,及动态label事件第一点:switch中的生成我们的label事件接着,

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

C#基础之委托详解(Delegate)

《C#基础之委托详解(Delegate)》:本文主要介绍C#基础之委托(Delegate),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 委托定义2. 委托实例化3. 多播委托(Multicast Delegates)4. 委托的用途事件处理回调函数LINQ

在C#中调用Python代码的两种实现方式

《在C#中调用Python代码的两种实现方式》:本文主要介绍在C#中调用Python代码的两种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#调用python代码的方式1. 使用 Python.NET2. 使用外部进程调用 Python 脚本总结C#调