(二)CSharp-数据类型

本文介绍了C#程序中的数据类型,包括预定义的简单类型如数值、字符和布尔型,以及非简单类型如string、object和dynamic。此外,详细阐述了变量的概念,如局部变量、值类型和引用类型的区别,以及构造器在对象实例化中的作用。同时,讨论了值参数和引用参数的传递机制以及动态类型dynamic的特点。
摘要由CSDN通过智能技术生成

一、数据类型

1、C#程序是一组类型声明

  • C 程序是一组函数和数据类型
  • C++ 程序是一组函数和类
  • C# 程序是一组类型声明

2、类型是一种模板

类型由下面的元素定义:

  • 名称
  • 用于保存数据成员的数据结构
  • 一些行为及约束条件

请添加图片描述

3、实例化类型

从某个类型模板创建实际的对象,称为实例化该类型

请添加图片描述

4、数据成员和函数成员

  • 数据成员: 保存了与这个类的对象或整个类相关的数据
  • 函数成员: 执行代码。函数成员定义类型的行为

请添加图片描述

5、预定义类型

简单类型包括以下3种:

  • 11 种数值类型
    • 1)不同长度的有符号和无符号整数类型。
    • 2)浮点数类型 float 和 double。
    • 3)一种称为 decimal 的高精度小数类型。与 float 和 double 不同,decimal 类型可以准确地表示分数。decimal 类型常用于货币的计算。
  • 一种 Unicode 字符类型 char。
  • 一种布尔类型 bool 。

3种非简单类型如下:

  • string,它是一个 Unicode 字符数组。
  • object,它是所有其他类型的基类。
  • dynamic,使用动态语言编写的程序集时使用。

请添加图片描述

所有预定于类型都是直接映射到底层的 .NET 类型。

表-预定义简单类型

名称含义范围.NET 框架类型默认值
sbyte8位有符号整数-128~127System.SByte0
byte8位无符号整数0~255System.Byte0
short16位有符号整数-32 768~32 767System.Int160
ushort16位无符号整数0~65 535System.UInt160
int32位有符号整数-2 147 483 948~2 147 483 647System.Int320
uint32位无符号整数0~4 294 967 295System.UInt320
long64位有符号整数-9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807System.Int640
ulong64位无符号整数0~18 446 744 073 709 551 615System.UInt640
float单精度浮点数5 × \times × 1 0 − 45 10^{-45} 1045 ~ 3.4 × \times × 1 0 38 10^{38} 1038System.Single0.0f
double双精度浮点数5 × \times × 1 0 324 10^{324} 10324 ~ 1.7 × \times × 1 0 308 10^{308} 10308System.Double0.0d
bool布尔型true falseSystem.Booleanfalse
charUnicode 字符串U+0000~U+ffffSystem.Char\x0000
decimal小数类型的有效数字精度为28 位 ± \pm ± 1.0 × \times × 1 0 24 10^{24} 1024 ~ ± \pm ± 7.9 × \times × 1 0 24 10^{24} 1024System.Decimal0m

表-预定义非简单类型

名称含义.NET 框架类型
object所有其他类型的基类,包括简单类型System.Object
string0个或多个 Unicode 字符所组成的序列System.String
dynamic在使用动态语言编写的程序集时使用无相应的 .NET 类型

6、用户定义类型

6种类型:

  • 类类型(class)
  • 结构类型(struct)
  • 数组类型(array)
  • 枚举类型(enum)
  • 委托类型(delegate)
  • 接口类型(interface)

7、C# 的五大数据类型

  • 类(Classes):如Window,Form,Console,String
  • 结构体(Structures):如Int32,Int64,Single,Double
  • 枚举(Enumerations):如HorizontalAlignment,Visibility
  • 接口(Interfaces)
  • 委托(Delegates)

二、变量

1、什么是变量

  • 表面上来看,变量的用途是存储数据
  • 实际上,变量表示了存储位置,并且每个变量都有一个类型,以决定什么样的值能够存入变量
  • 变量一共有7种
    • 静态变量,实例变量(成员变量,字段),数组元素,值参数,引用参数,输出参数,局部参数
  • 狭义的变量指局部变量,因为其他种类的变量都有自己的约定名称
    • 简单地讲,局部变量就是方法体(函数体)里声明的变量
  • 变量的声明
    • 有效的修饰符组合 opt 类型 变量名 初始化器 opt

2、值类型的变量

  • 以byte/sbtye/short/ushort 为例
  • 值类型没有实例,所谓的“实例”与变量合而为一
    引用类型的变量与实例
  • 引用类型变量与实例的关系:引用类型变量里存储的数据是对象的内存地址
    变量的默认值
    常量(值不可改变的变量)
    装箱与拆箱(Boxing & Unboxing)

3、 构造器

  • 构造器(constructor)是类型的成员之一
  • 狭义的构造器指的是“实例构造器”(instance constructor)
  • 如何调用构造器
  • 声明构造器
  • 构造器的内存管理

ctor+按下两次Tab,自动生成构造器
new的时候在堆分配内存(成员变量,int ID和string Name),构造器中分配int占4字节,string占4字节(NULL),栈是对象本身占的内存块

三、值类型和引用类型

C#类型的派生谱系

请添加图片描述

1、值类型和引用类型

这两种类型的对象在内存种的存储方式不同。

  • 值类型只需要一段单独的内存,用于存储实际的数据。(存放在堆还是栈取决于实际环境)
  • 引用类型需要两端内存。
    • 第一段存储实际的数据,它总是位于堆中。
    • 第二段是一个引用,指向数据在堆中的存放位置。引用存放在栈里。

请添加图片描述

C# 中的值类型和引用类型

请添加图片描述

自动初始化

请添加图片描述

1、dynamic关键字
在编译时,编译器不会对 dynamic 类型的变量做类型检查。相反,它将与该变量及该变量的操作有关的所有信息打包。在运行时,会对这些信息进行检查,以确保它与变量所代表的实际类型一致。否则,将在运行时抛出异常。

2、值参数
参数以不同的方式从方法传入或传出数据,称为值参数。
使用值参数时,通过将实参的值复制到形参的方式把数据传递给方法。方法被调用时,系统执行如下操作。

  • 在栈中为形参分配空间。
  • 将实参的值复制给形参。

3、引用参数
引用参数

  • 使用引用参数时,必须在方法的声明和调用中都使用 ref 修饰符。
  • 实参必须是变量,在用作实参前必须被赋值。如果是引用类型变量,可以赋值为一个引用或 null。
    引用参数具有以下特征:
  • 不会在栈上为形参分配内存。
  • 形参的参数名将作为实参变量的别名,指向相同的内存位置。

4、引用类型作为值参数和引用参数
在方法内设置引用类型形参时:

  • 将引用类型对象作为值参数传递
    如果在方法内创建一个新对象并赋值给形参,将切断形参与实参之间的关联,并且在方法调用结束后,新对象也将不复存在。
    (注意:在方法内,对象所引用的数据成员会有改变)
  • 将引用类型对象作为引用参数传递
    如果在方法内创建一个新对象并赋值给形参,在方法结束后该对象依然存在,并且是实参所引用的值。

5、可选参数
为方法的形参赋默认值。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值