类型、存储和变量

C#程序是一组类型声明


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

  • C#程序或DLL源码是一组一种或多种类型声明
  • 对于可执行程序,类型声明中必须有一个包含Main方法的类
  • 命名空间是一种把相关类型声明分组并命名的方法

类型是一种模板


可以把类型想象成一个用来创建数据结构的模板。模板本身不是数据结构,但它说明了由该模板构造的对象的特征。

类型由下面的元素定义:

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

例:short类型和int类型


实例化类型


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

  • 实例化类型创建的对象称为类型的实例(对象)
  • C#程序中,每个数据项都是某类型的实例。类型可以是语言自带的、BCL或其它库提供的,或是程序员定义的

数据成员和函数成员


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

预定义类类型


C#提供16种预定义类型,包括13种简单类型和3种非简单类型

  • 简单类型

    • 11种数值类型

      • 不同长度的有符号和无符号整数类型
      • 浮点数的float和double
      • 高精度小数类型decimal(常用于货币计算)
    • 一种Unicode字符类型 char
    • 一种bool类型,布尔值只能为true或false
  • 非简单类型
    • string Unicode字符数组
    • object 所有其他类型的基类
    • dynamic 使用动态语言编写程序集时使用

所有的预定义类型都直接映射到底层的.NET类型。C#类型名称就是.NET类型的别名,
所以可以使用.NET类型名称替代C#类型名,但不鼓励这样做。


用户定义类型


用户可以自定义6种类型

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

类型通过类型声明创建,类型声明包含以下信息

  • 要创建类型的种类
  • 新类型名称
  • 类型中每个成员的声明(array和delegate除外,它们不含命名成员)

栈和堆


程序运行时,他的数据必须存储在内存中。一个数据需要多大内存,存储在什么地方,以及如何存储都依赖于该数据项的类型。
运行中程序使用两个内存区域来存储数据:栈和堆

栈是一个LIFO(Last-In First-Out,后进先出)的内存数组。
栈存储以下几种类型数据

  • 某些类型变量的值
  • 程序当前的执行环境
  • 传递给方法的参数

栈的特征

  • 数据只能从栈的顶端插入或删除
  • 把数据放到栈顶称为入栈(push)
  • 从栈顶删除数据称为出栈(pop)

在堆里可以分配大块内存来存储某类型的数据对象。
与栈不同,堆里的内存能以任意顺序存入或移除。

CLR的GC(Garbage Collector,垃圾收集器)自动删除堆上不再访问的数据。


值类型和引用类型


  • 值类型只需要一段单独的内存。
  • 引用类型需要两段内存
    • 第一段存储实际数据,它总是位于堆中
    • 第二段是一个引用,指向数据在堆中的存放位置

存储引用类型对象的成员

如果数据是另一个对象的成员,那么它的存储会有些不同

  • 引用类型对象的数据部分始终存放在堆里
  • 值类型对象,或引用类型数据的引用部分可以存在堆里,也可以存在栈里,这取决于实际情况

对于一个引用类型,其实例的数据部分始终存放在堆里


C#类型的分类

变量


变量允许程序存取数据

  • 变量是一个名称,表示程序执行时存储在内存中的数据
  • C#提供4种变量

静态类型和dynamic关键字


每个变量都有变量类型,这样编译器就可以确定运行时需要的内存总量以及哪些部分应该存在栈上,哪些存在堆上。
变量类型在编译时就确定且不能在运行时修改,这叫静态类型。
dynamic代表一个特定的、实际的C#类型,它知道如何在运行时解析自身。

可空类型


某些情况下,特别是使用数据库时,你希望表示变量目前未保存有效的值(数据库中的null)。
对于引用类型,你可以直接把变量设置为null,但值类型不行。
可空类型允许创建可以标记为有效或无效的值类型

int? i =;
double? d1 =3.14;
bool? flag =null;
char? letter ='a';
int?[] arr =newint?[];

C# 图解教程 第三章 类型、存储和变量的更多相关文章

  1. 【卷土重来之C#学习笔记】(三) 类型 存储和变量

    .c#程序是一组类型声明 ※C#程序或DLL的源代码是一组一种或多种类型声明 ※对于可执行程序,类型声明必须有一个包含Main方法类 ※命名空间是一种把相关的类型声明分组并命名的方法.既然程序是一组相 ...

  2. [ABP教程]第三章 创建、更新和删除图书

    Web应用程序开发教程 - 第三章: 创建,更新和删除图书 关于本教程 在本系列教程中, 你将构建一个名为 Acme.BookStore 的用于管理书籍及其作者列表的基于ABP的应用程序. 它是使用以 ...

  3. [Learn Android Studio 汉化教程]第三章:使用 Android Studio 编程

    [Learn Android Studio 汉化教程]第三章:使用 Android Studio 编程 本章包含如何在 Android Studio 中书写或生成代码. Android Studio ...

  4. Objective-C 基础教程第三章,面向对象编程基础知

    目录 Objective-C 基础教程第三章,面向对象编程基础知 0x00 前言 0x01 间接(indirection) 0x02 面向对象编程中使用间接 面向过程编程 面向对象编程 0x03 OC ...

  5. Javascript权威指南——第二章词法结构,第三章类型、值和变量,第四章表达式和运算符,第五章语句

    第二章 词法结构 一.HTML并不区分大小写(尽管XHTML区分大小写),而javascript区分大小写:在HTML中,这些标签和属性名可以使用大写也可以使用小写,而在javascript中必须小写 ...

  6. Blend4精选案例图解教程(三):一键拖拽

    原文:Blend4精选案例图解教程(三):一键拖拽 拖拽效果,常规实现方法是定义MoveLeftDwon.MoveLeftUp.MouseMove事件,在Blend的世界里,实现对象的拖拽,可以不写一 ...

  7. 《JS权威指南学习总结--第三章类型、值和变量》

    第三章 类型.值和变量 内容要点 一.数据类型 1.在编程语言中,能够表示并操作的值的类型称做数据类型 2.JS的数据类型分为两类: 原始类型:数字.字符串和布尔值 对象类型 3.JS中有两个特殊的原 ...

  8. javascript进阶教程第三章--匿名和闭包--案例实战

    javascript进阶教程第三章--匿名和闭包--案例实战 一.学习任务 通过几个小练习回顾学过的知识点 二.实例 练习1: 实例描述:打开页面后规定时间内弹出一个新窗口,新窗口指定时间后自动关闭. ...

  9. C#_02.12_基础二_.NET类型存储和变量

    C#_02.12_基础二_.NET类型存储和变量 一.核心一句:C#程序是一组类型声明(留待后面慢慢体会,现在不是很理解,不强说了) 二.数据类型: 1.预定义了16种数据类型: 其中13种简单数据类 ...

随机推荐

  1. B 洛谷 P3604 美好的每一天 [莫队算法]

    题目背景 时间限制3s,空间限制162MB 素晴らしき日々 我们的情人,不过是随便借个名字,用幻想吹出来的肥皂泡,把信拿去吧,你可以使假戏成真.我本来是无病呻吟,漫无目的的吐露爱情---现在这些漂泊不 ...

  2. flask入门与发送邮件与QQ邮箱

    前言: 快两个月没写博客了, 原因是懒了, 没有最初写博客那种看到阅读量上涨, 别人给自己文章点赞后的开心. 心态也发生了不少变化. 有机会再来写写. 前两个月我去厦门某公司实习, 本着去厦门玩一玩还 ...

  3. VUE2.0 elemenui-ui 2.0.X 封装 省市区三级

    1. 效果图 2. 版本依赖  vue 2.X , elementui  2.0.11  使用element ui  <el-form>标签 3. 源码  components/CityL ...

  4. 计算机基础之Windows10操作系统安装U盘制作

    1.第一步,下载Windows10--ISO镜像(Windows7类似),下载站点: https://msdn.itellyou.cn/(百度搜索msdn即可),个人认为这是最干净的操作系统镜像站点, ...

  5. Python数据结构之三——dict(字典)

    Python版本:3.6.2  操作系统:Windows  作者:SmallWZQ 知识源于生活.Python也是如此. 提到字典,我首先想到的是数学大师--高斯. 为何想起他呢?这主要是因为高斯算法 ...

  6. shell编程之SHELL基础(1)

    shell脚本基础 shell是一个命令行解释器,她为互用提供了一个想linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动.挂起.停止甚至编写一些程序. shell还是一个功 ...

  7. docker cs50 ide 安装

    ECS上搭建Docker(CentOS7): https://help.aliyun.com/document_detail/51853.html docker官方文档: https://docs.d ...

  8. 用Python发送邮件

    文件:send.py # -*- coding:utf-8 -*- # ## 任兴测试用Python发送邮件 import os import sys import getopt import tim ...

  9. linux下利用shell脚本实现添加crontab任务

    本来直接用crontab -e 就可以打开vim,输入要执行的任务保存退出就可以添加任务直接启动运行了.但是今天组长说能不能写个shell不用打开vi就能添加到crontab的. 最先想到的是怎么在s ...

  10. PS如何批量生成缩略图(方法可以通用其他重复劳动)

    原图 缩略 进入正题,学生时代玩过脚本精灵的应该一点就通 原理就是:录制一系列动作,然后生成脚本,并执行(经常PS水印代码的一个可以用程序实现,一个就可以用PS脚本) 新建一个组 新建一个动作 进行你 ...