程序运行时,它的数据必须存储在内存中,数据项需要多大的内存、存储在什么地方以及如何存储都依赖该数据项的类型

运行中的程序使用两个区域来存储数据:栈和堆

栈是一个内存数组,是一个LIFO(last in first out后进先出)的数据结构

栈存储几种类型的数据:

某些类型变量的值

程序当前执行环境

传递给方法的参数

栈有以下几大特征

数据只能从栈的顶端插入和删除

把数据放到栈顶端称为入栈push

从栈顶删除数据称为出栈pop

堆是一块内存区域,在队里可以分配大块的内存用于存储某类型的数据。

与栈的不同,堆里的内存可以任意顺序存入和删除

程序可以在堆里保存数据,但并不能显示的删除她们,CLR的自动GC(GarbageCollector垃圾收集器)判断程序的代码将不会再访问某数据项时,自动清除无主的堆对象

---------值类型(数据存放栈中)和引用类型(引用存放在栈中-------指向数据堆中存放位置:数据存放堆中)

数据项的类型定义了存储数据需要的内存大小、组成该类型的数据成员以及该类型能执行的函数。还决定了对象在内存中的存储位置——栈和堆

类型被分两种:值类型和引用类型,两种类型的对象在内存中的存储方式不同

值类型只需要一段丹顿的内存,用于存储实际的数据

引用类型需要两段内存:

第一段存储实际的数据,它总是位于堆中

第二段是引用,指向数据在堆中的存放位置

存储引用类型对象的成员

引用类型对象的数据部分始终存放在堆里

值类型对象,或引用类型数据的引用部分可以存放在堆里,也可以存放在栈里,这依赖实际环境

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

----------------------------------------------------变量

一种多用途的编程语言必须允许程序存放数据,而这正是通过变量实现

变量是一个名称,表示程序执行时存储在内存的数据

c#提供了4中变量

名称   类型的成员 描述
本地变量  否(临时) 在方法的作用域保存临时数据
字段 是(保存) 保存和类型相关的数据
参数 否(传递) 用于从一个方法到另一个方法传递数据的临时变量
数组元素 是(保存) 用于保存临时的或类型相关的数据

变量声明

在使用之前必须声明

变量声明定义了变量,并完成了两件事:

给变量命名,并未他关联一种类型;

让编译器为它分配一块内存

一个简单变量类型声明至少需要一个类型和一个名称(如:int(类型) var1(名称))

在声明一个变量的同时要初始化(一些类型如果在声明时没有初始化,那么会被自动设为默认值(如:int默认值为0))

变量也可以多重声明(int var1=12,var3 var 2=5;)

变量名代表变量保存的值,可以通过使用变量名来使用值(Console.Writeline(“{0}”,var2))

------------------------------类

程序的数据和功能被组织为逻辑上相关的数据项和函数的封装集合,称之为类。

类是一个能存储数据并执行代码的数据结构,它包含以下的内容

数据成员,它存储与类或类相关的数据。数据成员通常摸你该类所表示的现实世界事物的特性。

函数成员,它执行代码。函数成员通常模拟类所表示的现实事物的功能和操作

一个c#类中可以包含任意数据的数据成员和函数成员

成员可以是9种可能的成员类型的任意组合

数据成员                                                       函数成员——执行代码

字段                                                                方法 属性 构造函数 析构函数 运算符 索引 事件

常量

类是逻辑相关的数据和函数的封装,通常代表真实世界中的或概念上的事物

一个运行中的c#程序的一组相互作用的类型对象,它们中的大部分的类的实例

如果想使用类,就必须定义新类的特征和成员

类的名称

类的成员

类的特征

c#学习基础(2)存储、值类型和引用类型、变量的更多相关文章

  1. .NET基础知识(01)-值类型与引用类型

    常见面试题目: 1. 值类型和引用类型的区别? 2. 结构和类的区别? 3. delegate是引用类型还是值类型?enum.int[]和string呢? 4. 堆和栈的区别? 5. 什么情况下会在堆 ...

  2. C#基础(四)--值类型和引用类型,栈和堆的含义

    本文主要是讨论栈和堆的含义,也就是讨论C#的两种类据类型:值类型和引用类型: 虽然我们在.net中的框架类库中,大多是引用类型,但是我们程序员用得最多的还是值类型. 引用类型如:string,Obje ...

  3. C#基础篇五值类型和引用类型

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace P01M ...

  4. C#学习笔记(基础知识回顾)之值类型和引用类型

    一:C#把数据类型分为值类型和引用类型 1.1:从概念上来看,其区别是值类型直接存储值,而引用类型存储对值的引用. 1.2:这两种类型在内存的不同地方,值类型存储在堆栈中,而引用类型存储在托管对上.存 ...

  5. Net基础篇_学习笔记_第十二天_面向对象继承(命名空间 、值类型和引用类型)

    命名空间可以认为类是属于命名空间的. 解决类的重名问题,可以看做类的“文件夹”如果在当前项目中没有这个类的命名空间,需要我们手动的导入这个类所在的命名空间.1).用鼠标去点2).alt+shift+F ...

  6. c#1所搭建的核心基础之值类型和引用类型

    这个主题很重要,在.NET中做的一切其实都是在和一个值类型或者引用类型打交道. 现实世界中的值和引用 假定你在读一份非常棒的东西,希望一个朋友也去读他.于是你到复印室里复印了一份.这个时候他获得了属于 ...

  7. Emit学习(2) - IL - 值类型和引用类型(补)

    上周末回家去享受生活了, 工作是为了更好的生活嘛, 所以我把生活, 工作分的比较开. 这几天不是很忙, 在学习工作技能的同时, 发点博文, 也算是做一个学习笔记 上篇中, 贴出的地址里面那位哥, 也有 ...

  8. C#基础知识系列二(值类型和引用类型、可空类型、堆和栈、装箱和拆箱)

    前言 之前对几个没什么理解,只是简单的用过可空类型,也是知道怎么用,至于为什么,还真不太清楚,通过整理本文章学到了很多知识,也许对于以后的各种代码优化都有好处. 本文的重点就是:值类型直接存储其值,引 ...

  9. C#基础|值类型和引用类型以及传参问题

    为了明白什么是值类型和引用类型,先引入你两个概念.堆内存与栈内存   堆内存与栈内存   由于咱的描述能力有限,就不对其下定义了,来看看两者的作用.   共同点: 都是用来存放数据的   不同点: 堆 ...

随机推荐

  1. 2018数学建模国赛总结(A题/编程选手视角)

    2018数学建模已经告一段落了,先说说基本情况吧,我们队伍专业分别为:金融(A),会计(B),计算机(我),配置还算可以,他们俩会数据分析软件也会写论文,我可以写代码,画图.他们俩打过美赛(M奖),我 ...

  2. cookie,session 的概念以及在django中的用法,以及cbv装饰器用法

    cookie的由来: 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不会直接影响后 ...

  3. Java面向对象之多态(向上、向下转型) 入门实例

    一.基础概念 多态: 重点是对象的多态性.某一事物的多种体现形态. 多态的作用: 1.提高了代码的扩展性,后期出现的功能,可以被之前的程序所执行. 2.不能使用子类特有的功能.只能使用覆盖父类的功能. ...

  4. YY的GCD 数学

    题目描述 神犇YY虐完数论后给傻×kAc出了一题 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对 kAc这种傻×必然不会了,于 ...

  5. python中的set实现不重复的原理

    最近在尝试写选课系统的时候遇到一个问题: 1.存在两个类 School.Teacher : 2.School实例中包含多个Teacher的实例,但又不可重复 本人想到在School中用set()存储, ...

  6. flask中的蓝图 Blueprint

    模块化 随着flask程序越来越复杂,我们需要对程序进行模块化的处理,之前学习过python的模块化管理,于是针对一个简单的flask程序进行模块化处理 简单来说,Blueprint 是一个存储操作方 ...

  7. 洛谷 P4859 && BZOJ3622: 已经没有什么好害怕的了

    题目描述 给出 \(n\) 个数 \(a_i\)​ ,以及 \(n\) 个数 \(b_i\)​ ,要求两两配对使得 \(a>b\) 的对数减去 \(a<b\) 的对数等于 \(k\) . ...

  8. git 项目常用命令

    git remote -v 查看对应的远程仓库 git fetch origin master 将某个远程主机的更新,全部取回本地 git merge origin master 合并分支 git a ...

  9. win10 安装MySQL8.0.11记录。

    参考了博客A:https://blog.csdn.net/m0_37788308/article/details/79965378 博客B:https://blog.csdn.net/fxbin123 ...

  10. C++的一些编程规范

    新规范的目标: 让代码排错更加简单 程序员专心于业务逻辑 将一些错误交给编译器处理 提高代码可维护性 逐步实现插件化 编码 使用array(QT下用QVarLengthArray)代替和vector代 ...