(二)CSharp-数据类型

news2024/12/23 13:06:12

一、数据类型

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、可选参数
为方法的形参赋默认值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/617327.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

完败!资深码农 VS 新手+AI;阿里云AI黑客松千万奖金池;手把手教你用AI写小说;微软AI入门课 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 阿里云首届AI黑客马拉松,共享 1000 万美元风投资金池 阿里云官方宣布,将以国内最大AI模型社区「Model Scope 魔…

基于双视角图表示算法的双向人职匹配偏好建模推荐系统构建

基于双视角图表示算法的双向人职匹配偏好建模推荐系统构建 文章目录 基于双视角图表示算法的双向人职匹配偏好建模推荐系统构建1. 传统推荐系统模型2. 协同过滤算法3. 基于双视角图表示学习算法的模型构建3.1 数据输入3.2 双视角交互图的构建3.3 混合偏好传播策略3.4 对于双向意…

H5项目怎么打包成APP

文章目录 前言一、新建5APP项目二、删除不需要的文件三、将H5打包的文件拷贝到当前目录下四、配置APP五、发行-云打包六、安装apk总结 前言 开发uni-app的编辑器HBuilderX可以将H5项目打包成APP,相信很多小伙伴还不知道这个功能,下面将介绍下如何将H5打…

linux MMU内存管理单元

本篇文章简要阐述MMU的概念,以及以段地址的转换过程为例,简单说明MMU将虚拟地址转换成物理地址的过程。更多详细内容请查看《ARM-MMU(中文手册).pdf》。 1、MMU概述 在ARM存储系统中,使用MMU实现虚拟地址到实际物理地址的映射。为何要实现这…

人工智能学习07--pytorch21--目标检测:YOLO系列理论合集(YOLOv1~v3)

如果直接看yolov3论文的话,会发现有好多知识点没见过,所以跟着视频从头学一下。 学习up主霹雳吧啦Wz大佬的学习方法: 想学某个网络的代码时:到网上搜这个网络的讲解 → 对这个网络大概有了印象 → 读论文原文( 很多细…

Django实现接口自动化平台(五)httprunner(4.x)介绍【持续更新中】

上一章: Django实现接口自动化平台(四)解决跨域问题【持续更新中】_做测试的喵酱的博客-CSDN博客 下一章: 一、httpruner介绍 1.1 背景: 之所以学习httpruner的用法,是要把httpruner嵌入我们的自动化平…

全网最全、最新MyBatis框架核心知识

MyBatis框架 1. 软件开发常用结构 MyBatis是操作数据库的,相当于是一个增强的JDBC 1.1 三层架构 三层架构包括: 界面层(User Interface layer)业务逻辑层(Business Logic Layer)数据访问层(Dat…

Window搭建IOS App自动化测试环境

平台搭建:tidevice(Windows逆向通信iOS工具)WebDriverAgent(iOS通信服务)facebook-wda(iOS测试框架) macOSXcode:在手机上安装WebDriverAgent的时候需要用到,必须要Xcod…

HDFS概述及其优缺点

什么是HDFS? HDFS的全称是hadoop distributed file system,即hadoop的分布式文件系统。 见名知意,它就是用来进行文件存储的。毕竟它是大数据的一个组件,用来存储这种海量的数据。 它是基于03年10月份,谷歌发表的GFS…

Hadoop 怎么委任和解除节点?

前言 本文隶属于专栏《大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见大数据技术体系 正文 Hadoop 集群的管理员经常需要向集群中添加节点…

Android Studio引用第三方库的方式

title: 大小端详解 date: 2023-06-06 21:01:24 comments: true #是否可评论 toc: true #是否显示文章目录 categories: #分类 - gradle - android studio tags: #标签 - gradle - android studio summary: android stduio 导入第三方库方式 Android Studio引用第三方库的方式 …

NCUTer 我的创作纪念日(2023-06-06)

前言 大家好,我是NCUTer,今天收到私信,突然发现,我来到CSDN已经2年多了,距离发布第一篇博客已经2年整了。正式规划性的写博客,是在2021年6月底开始的,当时啥也不懂,不知道该怎么去做…

10万字XX市开发区智慧综治中心平台建设一期工程招标文件word

(一)智慧综治中心信息化平台 需基于“一个平台,多级用户”的原则,利用移动互联网、物联网、大数据、人工智能和地理信息等新一代信息技术,整合辖区多方社会治理数据,建立一个覆盖全区三级综治中心用户的统一…

2个原因解答:为什么网络安全缺口大,招聘却很少?

2023年我国网络空间安全人才数量缺口超过了140万,就业人数却只有10多万,缺口高达了93%。这里就有人会问了: 1、网络安全行业为什么这么缺人? 2、明明人才那么稀缺,为什么招聘时招安全的人员却没有那么多呢?…

【博客639】Life of a label in prometheus

prometheus中label的生命周期 前言 Prometheus labels allow you to model your application deployment in the manner best suited to your organisation. As directly supporting every potential configurations would be impossible, we offer relabelling to give you t…

Paxos算法

组成 Paxos算法有proposer, accepter, leaner三种角色节点,其中proposer有点像客户端,而accepter是存储节点。 持久化需要 basic-Paxos是二阶段进行的 第一阶段 propose发起prepare请求,带上rnd accpeter如果发现rnd,比如自己…

图论在数学建模中的应用及MATLAB实现

2023年9月数学建模国赛期间提供ABCDE题思路加Matlab代码,专栏链接(赛前一个月恢复源码199,欢迎大家订阅):http://t.csdn.cn/Um9Zd 目录 图论基本概念 图论原理 1. 最短路径问题 2. 最小生成树问题 MATLAB实现 1. 创建图 2. 最短路径算法 3. 最小生成树算法 数学建模案…

第一章 小程序入门

文章目录 前言一、❎ 环境搭建1、AppID2、设置外观和代理3、小程序项目构成小程序的基本结构小程序的页面组成部分 4、JSON 配置文件JSON 配置文件的作用app.json 配置文件project.config.json 配置文件sitemap.json 配置文件页面 .json 配置文件 5、WXML 模板什么是 wxmlwxml …

Java --- springboot3之web静态资源配置

目录 一、静态资源规则 二、欢迎页规则 三、favicon.ioc规则 四、HTTP缓存机制 五、自定义静态资源规则 5.1、配置方式 5.2、代码方式 一、静态资源规则 Override public void addResourceHandlers(ResourceHandlerRegistry registry) {if (!this.resourceProperties.is…

UA-ModelCompiler 的编译和使用

UA-ModelCompiler 是OPCFoundation的开源程序,它实现将NodeSet 的xml 文件编译成C# 的类,以便结合到UA Server 中。同时,它也能够将一种简便的模型xml 文档(ModelDesgin.xml) 转换成为NodeSet2.xml 。 最近的项目中要使用UA-ModelCompiler &…