提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
一、数据类型
1.数据类型
(1).类型分类
通用类型系统CTS(Common Type System)是.NET框架中的一个组成部分,为所有面向.NET框架的语言定义了数据类型的规则。
值类型:存储数据本身。
引用类型:存储数据的引用(内存地址)。
(2).类型归属
在vs界面中,输入一个int
接着按下f12将会跳转到以下界面
其中public为公开的,即都可以调用
struct为结构体
int32即int能够存储32位
同理
在按下f12后
Single为单精度浮点。
以此类推
Boolean为bool数值类型,即bool的全称
但是在使用string和arr时发生了变化
class指的是类。
array也是同理,出现为class 类。
2.内存分配
(1).内存
(2).分配
注: 公共语言运行库 (common language runtime,CLR) 是托管代码执行核心中的引擎。
3.局部变量
·定义在方法内部的变量。
·特点:
–没有默认值,必须自行设定初始值,否则不能使用。
–方法被调用时,存在栈中,方法调用结束时从栈中清除。
(1).值类型与引用类型
由此可得
内存分配的图像
其中arr[0]=2修改的是堆中的数据
而arr=new int[]{2}修改的是栈中存储的引用(可以理解为指针)
string和object也是同理
注意:这里开辟了两个栈,一个是主函数一个是函数的,改变另一个栈中的数据对本栈没有影响
影响方式:以现有的方式可以通过return返回值接受返回值的方式影响其他栈。
(2).分配图
(1).比较
(2).赋值
(3).传参
(3).垃圾回收器
另外;
字符串常量具备字符串池特性
字符串常量在创建前,首先在字符串池中查找是否存在相
同文本。如果存在,则直接返回该对象引用;如果不存在,则
开辟空间存储。
目的:提高内存利用率。
字符串具有不可变性
字符串常量旦进入内存 ,就不得再次改变。 因为如果在
原位置改变会使其他对象内存被破坏,导致内存泄漏。当遇到
字符串变量引用新值时,会在内存中新建一个字符串 ,将该字
符串地址交由该变量引用。
因此才有了另外一种改进方式。
可变字符串。
6.拆装箱
如图中所示
string str02 = “”+num;
这个行为实质上是string str02= string.Concat("".num);//int==.object
调用了Concat这个方法,需要进行转换
这个部分使得其中int类型被装箱变为object;浪费了空间
改进:
直接使用ToString这个方法直接进行同类对接,可以避免转化,可以避免装箱这个操作,避免浪费性能。
注:拆装箱实质上因为现阶段硬件性能的进步对于程序影响不大,可以使用。
枚举
枚举类型是为一组在逻辑上密不可分的整数值提供便于记忆的符号。它是把一组相同类型、表达固定含义的数据作为一个集合放到一起,形成新的数据类型。枚举类型也是一种值类型,它具有命名常量的独特的类型。
1.简单枚举
2.标志枚举
使用方法示例
二、类和对象
1.类的介绍
1.类和对象
2.创建类
3.创建对象
成员变量
值类型与引用类型
2.构造函数
1.定义
2.特点
4.this关键词
在结构的构造函数中出现的this 作为-一个变量类型,它表示对正在构造的结构的引用。在结构的方法中出现的this作为一个变量类型,它表示对调用该方法的结构的引用。
5.属性
6.类结构
其结构为
[附加声明] [访问修饰符] class 类名称[: [基类] [, 接口序列]]
{
[字段声明]:存储数据
[属性]:保护数据
[构造函数]:提供创建对象的方式,初始化类的数据成员
[方法]:向类的外部提供某种功能
[事件]
}
注意
类中的方法(method)、属性(property)、事件(event),尽量声明为private,需要外部调用时,尽量用public。
如果一个类过于复杂,则考虑将其拆分为几个类来实现。
7.static
继承
1.静态成员变量
2.静态成员函数
3.静态方法
4.静态类
总结
结构
什么是结构
定义结构体
C#中,结构与类的区别
1.在结构体中可以声明字段,但是声明字段的时候是不能给初始值的.
2.隐式的无参数的构造函数在结构中无论如何都是存在的,所以程序员不能手动的为结构添加1个无参数的构造函数.
3.C#语法规定在结构体的构造函数中,必须要为结构体的所有字段赋值.
4.在结构体的构造函数中我们为属性赋值,不认为是在对字段赋值,所以我们在构造函数中要直接为字段赋值.
5.结构体不能从另外1个结构或者类继承,但是可以实现接口.特殊的是.结构不能从别的类或者结构继承。
6.它们之间最大的区别 是结构体是值类型 类是引用类型.