深入.NET数据类型(1)
时间:2022-05-04
本文章向大家介绍深入.NET数据类型(1),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一.值类型和引用类型
所有的值类型和引用类型的引用都存在“栈”中
1.值类型
命名空间:System.ValueType
值类型数据储存所在的内存区域成为栈
值类型主要包括基本数据类型和枚举类型,结构
值类型的赋值原理:
在栈上复制的真实值
实例代码:
//张浩和李明去年身高都是170cm,今年李明长到了180cm,张浩没有变化,
//输出去年和今年两人身高
int zhheight = 170;
int lmheigt = zhheight;
Console.WriteLine("去年张浩身高是{0}t李明的身高是{1}", zhheight, lmheigt);
lmheigt = 180;
Console.WriteLine("今年张浩身高是{0}t李明的身高是{1}", zhheight, lmheigt);
2.引用类型
命名空间:System.Onject
引用类型主要包括数组,类和接口,字符串等
储存在栈和堆中
堆上储存的真实对象本身真实对象的属性
示例代码:
int[] zhArray={170,60};
int[] lmArray = zhArray;
Console.WriteLine("去年张浩身高是{0},体重是{1}t李明的身高是{2},体重是{3}", zhArray[0],zhArray[1], lmArray[0],lmArray[1]);
Console.WriteLine("================我是高贵的分割线====================");
lmArray[0] = 180;
lmArray[1] = 70;
Console.WriteLine("今年张浩身高是{0},体重是{1}t李明的身高是{2},体重是{3}", zhArray[0], zhArray[1], lmArray[0], lmArray[1]);
//解决:
int[] zhArray = { 170, 60 };
int[] lmArray = new int[2];
for (int i = 0; i < zhArray.Length; i++)
{
lmArray[i] = zhArray[i];
}
Console.WriteLine("去年张浩身高是{0},体重是{1}t李明的身高是{2},体重是{3}", zhArray[0], zhArray[1], lmArray[0], lmArray[1]);
Console.WriteLine("================我是高贵的分割线======================");
lmArray[0] = 180;
lmArray[1] = 70;
Console.WriteLine("今年张浩身高是{0},体重是{1}t李明的身高是{2},体重是{3}", zhArray[0], zhArray[1], lmArray[0], lmArray[1]);
3.细分值类型和引用类型
类别 |
描述 |
|
---|---|---|
值类型 |
基本数据类型 |
整型:int |
&长整型:long | ||
浮点型:float 双精度:double | ||
字符型:char | ||
波尔型:bool | ||
枚举类型 |
枚举:enum |
|
结构类型 |
结构:strut |
|
引用类型 |
类 |
基类:System.Object |
字符串:string | ||
自定义类:class | ||
接口 |
接口:interface |
|
数组 |
数组:int[],string[] |
二.结构
1.定义:
语法:
访问修饰符 struct 结构名
{
//结构体
}
特点:
结构中可以有字段,也可以有方法
定义时,结构中的字段不能被赋初值
示例代码:
//定一个自己的结构体
public struct MyPointer
{
//成员 属性 结构体的成员变量不能有初值
private int age;
public int Age
{
get { return age; }
set { age = value; }
}
//结构体中可以定义方法
public void show()
{
}
}
2.使用
可以不用new。直接定义结构的对象即可
声明结构的对象后,必须给结构的成员赋初值
示例代码:
static void Main(string[] args)
{
//使用结构体
MyPointer pointer=new MyPointer();
pointer.Age = 20;
pointer.show();
}
3.使用经验
不推荐使用(结构用得越多所消耗的存储空间也越多)
三.构造函数
示例代码:
public class Player
{
//无参
private Player()
{
//归类:方法(方法)/函数 (面向过程)
}
//有参
public Player(string name)
{
//归类:方法(方法)/函数 (面向过程)
}
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 联想Y480 ubuntu安装有线驱动
- 通过运行时单步调试弄清楚[(ngModel)]的双向绑定的工作原理
- Shadow Root DOM的一些API
- 【Flutter高级玩法- Flow 】我的位置我做主
- PCMAN FTP STOR命令栈溢出
- 一个基于ngrx的Angular图书搜索应用,带网络请求
- Android利用RecyclerView实现列表倒计时效果
- 【Flutter Unit 重大更新 1 】超好用的组件收藏夹上线
- android特卖列表倒计时卡顿问题的解决方法
- dotnet 多线程禁止同时调用相同的方法 禁止方法重入调用 双检锁的设计
- android实现倒计时功能(开始、暂停、0秒结束)
- 【-Flutter/Dart 语法补遗-】 sync* 和 async* 、yield 和yield* 、async 和 await
- android实现条目倒计时功能
- Android实现简单手电筒功能
- k8s安装自动证书签发cert-manager letsencrypt