[第一天]C#学习笔记

一、类型

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

2、通过实例化类型而创建的对象被称为类型的对象或类型的实例

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

① 13种简单类型中包括11种数值类型(包括整数类型和浮点类型)和2种非数值类型

表一  11种数值类型


类型名称


注释


 整数类型


8种


sbyte


8位有符号整数


byte


8位无符号整数


short


16位有符号整数


ushort


16位无符号整数


int


32位有符号整数


uint


32位无符号整数


long


64位有符号整数


ulong


64位无符号整数

   

浮点类型


3种


float


单精度浮点数


double


双精度浮点数


decimal


高精度小数类型,有效数字精度位28位。

表二  2种非数值类型


类型名称


注释


char


Unicode字符类型


bool


布尔类型

② 3种非简单类型


类型名称


注释


object


所有其他类型的基类


string


0个或多个Unicode字符所组成的序列


dynamic


在使用动态语言编写的程序集时使用

③ C#有6种类型可以由用户自己创建,分别是 类类型(class)结构类型(struct)数组类型(array)枚举类型(enum),委托类型(delegate)接口类型(interface)

二、栈和堆

1、栈

① 是一个内存数组,是一个后进先出(LIFO)的数据结构。

② 栈存储几种类型的数据:某些类型变量的值程序当前的执行环境传递给方法的参数

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

④ 把数据放到栈顶成为入栈(push)。

⑤ 从栈顶删除数据称为出栈(pop)。

2、堆

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

② 堆与栈不同的是,堆里的内存能够以任意顺序存入和删除

三、值类型与引用类型

类型除了决定了存储数据需要的内存大小以及组成该类型的数据成员,还决定了类型的对象在内存中的存储位置,于是类型又被分为两种,值类型引用类型。

1、值类型:数据存放在栈里

2、引用类型:引用存放在栈里数据存放在堆里

3、当数据是另一个对象的成员,存储方式会有些不同。

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

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

如引用类型的实例S,它有两个成员,值类型成员A,引用类型成员B。

尽管成员A是值类型,但它也是引用类型的实例S的数据的一部分,所以存放在堆里。

而成员B是引用类型,它的数据部分会始终存放在堆里,它的引用部分因为也作为S的数据的一部分,所以也会被存放在堆里

四、变量

1、分类

① 本地变量:在方法的作用域保存临时数据,不是类型的成员

② 字段:保存和类型或类型实例相关的数据,是类型的成员

③ 参数:用于从一个方法到另一个方法传递数据的临时变量,不是类型的成员

④ 数组元素:通常是同类数据项构成的有序集合的一个成员,可以为本地变量也可以为类型的成员

2、无初始化语句的本地变量有一个未定义的值,在赋值之前不能使用试图使用未定义的本地变量会导致编译器产生一条错误信息

3、自动初始化:一些类型的变量如果在声明时没有初始化语句,那么会被自动设为默认值,而一些则不能。

表三  变量


变量类型


存储位置


是否自动初始化


本地变量


栈 或 栈和堆



类字段




结构字段


栈或堆



参数




数组类型



4、多变量声明

① 多变量声明中的变量必须类型相同

②变量名间必须用逗号分隔可以在变量名后包含初始化语句

5、静态类型和dynamic关键字

① 静态类型:变量的类型在编译的时候已经确定并且不能在运行时修改。

② dynamic关键字:代表一个特定的、实际的C#类型,它知道如何在运行时解析自身。在编译时,编译器不会对dynamic类型的变量进行类型检查

而是,它会将与该变量以及与该变量的操作相关的所有信息打包。在运行时,这些信息将会被检查,以确保它与变量所代表的实际类型保持一致

否则,将在运行时抛出异常。

6、可空类型

在某些情况下,特别是使用数据库的时候,你希望表示变量目前未保存有效的值。对于引用类型可以把变量设置为null。但定义值类型的变量时,不管它的内容是否时有效的,

其内存都会进行分配。对于这种情况,可以使用一个布尔指示器来和变量关联,如果值有效,则设置为true,否则就设置为false,而用可空类型也可以来解决,可空类型允许创建可以标记为有效或无效的值类型

这样就可以在使用它之前确定值的有效与否。

时间: 2024-10-10 05:40:38

[第一天]C#学习笔记的相关文章

邹欣老师的《构建之法》第一章“概论”学习笔记与自我随笔

刚读完了邹欣老师的<构建之法>第一章“概论”,四个字形容:酣畅淋漓. 概论将自己的一些模糊的认识清晰化,用准确的文字描述了出来,填补了脑海里的一些灰色地带. 总结一下:概论通俗地阐述了编程.软件.计算机科学.软件工程的联系与区别,简单说,编程是一项具体动作,软件是供人使用的产品,具体有很多种类型,而计算机科学是偏向理论研究,软件工程就像其他工程学一样,是在一定条件下合理配置资源达到生产软件的目的. 本人作为一名从小对编程.软件.计算机感兴趣的Nerd,虽然大学专业与此无关,但刚毕业时签了一份软

Android第一行代码学习笔记二---在活动中使用Toast

Toast:是Android系统提供的一种非常好的提醒方式,在程序中可以使用它将一些短小的信息通知给用户,这些信息会在一段时间后自动消失,并且不会占用任何屏幕空间. 首先需要定义一个弹出Toast触发点,接着笔记一的程序,正好上面有个按钮,我们就点击这个按钮的时候弹出来一个Toast,在onCreate()方法中添加如下代码: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceStat

Android第一行代码学习笔记六---Intent向活动传递数据

@1.向下一个活动传递数据: Intent提供了一系列putExtra()方法的重载,可以把我们想要传递的数据暂存在Intent中,启动了另一个活动后,只需把这些数据再从Intent中取出就可以了,比如firstActivity中有一个字符串要传递到secondActivity中,修改firstActivity中按钮点击事件,代码可以这样编写: button.setOnClickListener(new View.OnClickListener() { public void onClick(V

&lt;第一行代码&gt;学习笔记1.09

一.四大组件 Activity,Service,Broadcast Receiver,Content Provider. 二.搭建开发环境 三.自动创建android项目 1.创建项目  file---new---android application project application name:Hello World project name:HelloWorld package name:com.test.helloworld 2.创建活动 勾选create activity会创建模板

Android第一行代码学习笔记七---活动的生命周期

@1.返回栈 Android中的活动是可以层叠的,我们每启动一个新的活动,就会覆盖在原活动之上,然后点击Back键就会销毁最上面的活动,下面一个活动就会重新显示出来. Android是使用任务(Task)来管理活动的,一个任务就是一组存放在栈里的活动的集合,这个栈也被称为返回栈(Back Stack).栈是一种后进先出的数据结构,在默认情况下,每当我们启动了一个新的活动,它会在返回栈中入栈,并处于栈顶的位置.而当我们按下Back键或调用finish()方法去销毁一个活动时,处于栈顶的活动会出栈,

Android第一行代码学习笔记三---在活动中使用Menu

在活动中使用Menu: 如果你活动中大量的菜单需要显示,这个·时候·界面·设计就会比较尴尬,Android给我们提供了一种方式,可以让菜单都能得到展示的同时,还能不占用任何空间.· res目录下新建一个menu文件夹,右击res目录->New->Directory,输入文件名menu,点击OK,接着在这个文件夹下.新建一个菜单文件,右击menu文件夹->New->Menu resource file.文件名输入main. 打开文件main.xml,输入如下代码: <?xml

第一本书的学习笔记

林清玄先生的散文集是我最为喜爱的文章,就拿他的那本<你心柔软,却有力量>来说,其中的禅意令我久久不能忘怀,读他的书,可以让我们的心平静下来,在现在这个浮躁的社会,可以说是非常重要的. 暂且不论其它外物对我们的影响有多大,单是我们自己这关就过不了.就不要去谈再去学习什么高深的学问了,现在谈这本书,倒不是说我从这本书里学到了什么高深的知识,而是教会了我如何去做一个可以静的下心来的人.学习中,最忌讳的不外乎就是想着可以突飞猛进,大学里不学习,就想着可以在考试前的半个月猛复习,就可以有跟别人一样的成绩

第三讲:C++基础语法 &amp; 创建第一个场景 ------学习笔记

C++语法 1.在.H(头文件)文件里面进行声明,在CPP文件里面进行定义: 2.双冒号:: 是一个作用域操作符: //自动回收机制,当不用这个类的时候,自动回收 CREATE_FUNC(HelloWorld); 如何创建一个最简单的场景: 新增一个类: 然后在头文件处输入 #pragma once#include "cocos2d.h" using namespace cocos2d; class MyScene:public CCLayer{public: MyScene(); ~

自定义属性,第一节——JS学习笔记2015-5-25(第38天)

1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 5 <title>无标题文档</title> 6 <style> 7 li { list-style:none; width:114px; height:140px; bac