当前位置: 首页 > news >正文

C#【进阶】特殊语法

特殊语法、值和引用类型

特殊语法

在这里插入图片描述

文章目录

    • 特殊语法
      • 1、var隐式类型
      • 2、设置对象初始值
      • 3、设置集合初始值
      • 4、匿名类型
      • 5、可空类型
      • 6、空合并操作符
      • 7、内插字符串
      • 8、单句逻辑简略写法
    • 值和引用类型
      • 1、判断值和引用类型
      • 2、语句块
      • 3、变量的生命周期
      • 4、结构体中的值和引用
      • 5、类中的值和引用
      • 6、数组中的存储规则
      • 7、结构体继承接口

1、var隐式类型

var是一种特殊的变量类型
它可以用来表示任意类型的变量
注意:1、var不能作为类的成员,只是临时声明2、var必须初始化

2、设置对象初始值

声明对象时
可以通过直接写大括号的形式初始化公共成员变量和属性
作用:可以快速初始化小括号可以省略

3、设置集合初始值

声明集合对象时
可以通过大括号直接初始化内部属性

4、匿名类型

var可以声明为自定义的匿名类型var v = new { age = 18, money = 100};

5、可空类型

1、值类型是不能为空的int c = 3;
2、声明时,在值后面加?int? c = null;
3、判断是否为空if (c.HasValue){Console.WriteLine(c);Console.WriteLine(c.Value);}
4、安全获取可空类型值int? value = null;4-1、如果为空,默认返回值类型的默认值Console.WriteLine(value.GetValueOrDefault());4-2、指定一个默认值Console.WriteLine(value.GetValueOrDefault(-1));4-3?会自动判断是否为空object o = null;if (o!=null){o.ToString();}//?相当于语法糖o?.ToString();//数组判断非空简写int[] arrayInt = null;arrayInt?[0];//委托判断非空简写Action action = null;action?.Invoke;

6、空合并操作符

空合并操作符 ??
左边值 ?? 右边值
如果左边值为null 就返回右边值,否则返回左边值
只要是可以为null的类型都能用int? intV = null;//int intI = intV == null ? 100 : intV.Value;int intI = intV ?? 100;string str = null;str = str ?? "空";Console.WriteLine(str);

7、内插字符串

用$来构造字符串,让字符串可以拼接变量
int age = 18;
Console.WriteLine($"年龄{age}岁");

8、单句逻辑简略写法

当循环或者if语句只有一句代码时,大括号可以省略
方法只有一句代码时可以直接 =>

值和引用类型

1、判断值和引用类型

F12查看
class 是引用
struct 是值

2、语句块

命名空间↓
类、接口、结构体↓
函数、属性、索引器、运算符重载等(类、接口、结构体)↓
条件分支、循环上层语句块:类、结构体
中层语句块:函数
底层的语句块: 条件分支 循环等我们的逻辑代码写在哪里?
函数、条件分支、循环-中底层语句块中我们的变量可以申明在哪里?
上、中、底都能申明变量
上层语句块中:成员变量
中、底层语句块中:临时变量

3、变量的生命周期

编程时大部分都是 临时变量
在中底层申明的临时变量(函数、条件分支、循环语句块等)
语句块执行结束 
没有被记录的对象将被回收或变成垃圾值类型:被系统自动回收
引用类型:栈上用于存地址的房间被系统自动回收,堆中具体内容变成垃圾,待下次GC回收

4、结构体中的值和引用

结构体本身是值类型
前提:该结构体没有做为其它类的成员
在结构体中的值,栈中存储值具体的内容
在结构体中的引用,堆中存储引用具体的内容引用类型始终存储在堆中

5、类中的值和引用

类本身是引用类型
在类中的值,堆中存储具体的值
在类中的引用,堆中存储具体的值

6、数组中的存储规则

数组本身是引用类型
值类型数组,堆中房间存具体内容
引用类型数组,堆中房间存地址

7、结构体继承接口

利用里氏替换原则,用接口容器装载结构体存在装箱拆箱
http://www.lryc.cn/news/359031.html

相关文章:

  • c语言之向文件读写数据块
  • 6键编程智能照明:编程指南与深度解析
  • sql server 中的6种约束
  • 师彼长技以助己(2)产品思维
  • Redis学习笔记【基础篇】
  • 【文献阅读】基于模型设计的汽车软件质量属性
  • 撸广告赚金币小游戏app开发
  • 海外高清短视频:四川京之华锦信息技术公司
  • 16:00面试,16:08就出来了,问的问题有点变态。。。
  • Android MediaCodec 简明教程(九):使用 MediaCodec 解码到纹理,使用 OpenGL ES 进行处理,并编码为 MP4 文件
  • Neo4j安装部署及python连接neo4j操作
  • 一维时间序列信号的改进小波降噪方法(MATLAB R2021B)
  • Java整合EasyExcel实战——3(上下列相同合并单元格策略)
  • dmdts连接kingbase8报错
  • 【算法训练 day44 分割等和子集】
  • 前端实习记录——git篇(一些问题与相关命令)
  • XML Web 服务技术解析:WSDL 与 SOAP 原理、应用案例一览
  • 解析Java中1000个常用类:FunctionalInterface类,你学会了吗?
  • Kafka自定义分区器编写教程
  • python移动文件
  • eNSP学习——OSPF的DR与BDR
  • 【文献阅读】应用人工智能在Simulink中开发软件
  • 【计算机毕设】基于SpringBoot的房产销售系统设计与实现 - 源码免费(私信领取)
  • Docker 私有仓库部署和管理
  • 大模型时代的具身智能系列专题(六)
  • Pytorch入门需要达到的效果
  • 数据结构的快速排序(c语言版)
  • 数据结构基础篇(4)
  • 使用cad绘制一个螺旋输送机
  • 迭代器模式(行为型)