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、结构体继承接口

利用里氏替换原则,用接口容器装载结构体存在装箱拆箱

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/641238.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32+CubeMX移植SPI协议驱动W25Q16FLash存储器

STM32CubeMX移植SPI协议驱动W25Q16FLash存储器 SPI简介拓扑结构时钟相位(CPHA)和时钟极性( CPOL) W25Q16简介什么是Flash,有什么特点?W25Q16内部块、扇区、页的划分引脚定义通讯方式控制指令原理图 CubeMX配…

【Linux】Linux下centos更换国内yum源

🌱博客主页:青竹雾色间 🌱系列专栏:Linux 😘博客制作不易欢迎各位👍点赞⭐收藏➕关注 目录 1. 备份旧的 YUM 源文件2. 下载国内的 YUM 源文件阿里云:网易: 3. 清理 YUM 缓存4. 更新…

【C语言】走进指针世界(下卷)

前言 在“走进指针世界(上卷)”中,我们已经说过:什么是指针、内存和地址,指针的使用、声明、初始化,取地址运算符、解引用运算符以及这两者关系,还有指针赋值。 在正式使用指针进行各种代码的…

海外动态IP代理如何提高效率?

动态住宅IP代理之所以能够有效提升数据爬取的效率和准确性,主要归功于其提供的IP地址具有高度的匿名性和真实性。这些IP地址来自于真实的用户网络,因此相比于数据中心IP,它们更不容易被网站的安全系统标识为爬虫。此外,由于IP地址…

C:通过fwrite和fread读写数据结构

1.头文件 #include <stdio.h> 2.fopen()函数 调用fopen()函数可以打开或创建一个文件。 FILE *fopen(const char *path, const char *mode); path &#xff1a; 参数 path 指向文件路径&#xff0c;可以是绝对路径、也可以是相对路径。 mode &#xff1a; 参数 mode …

React useState数组新增和删除项

在React中&#xff0c;我们可以使用useState钩子来管理组件的状态&#xff0c;其中包括数组。如何在React函数组件中对数组进行增加和删除项的操作&#xff1f; 新增项时&#xff1a;我们可以对原数组进行解构&#xff0c;并把新增项一起加入到新数组&#xff1b; 删除项时&…

JDBC(Java DataBase Connectivity)Java数据库连接

JDBC(Java DataBase Connectivity) Java 语言连接数据库 再本模块中,java提供里一组用于连接数据库的类和接口Java 语言开发者,本身没有提供如何具体连接数据库的功能只是定义了一组java程序连接数据库的访问接口 连接到数据库向数据库发送增,修改,删除这一类的sql发送查询sq…

CATIA入门操作——为什么大佬的工具栏是水平的?如何把工具栏变水平?

目录 引出工具栏怎么变成水平&#xff1f;总结发生肾么事了&#xff1f;&#xff1f;鼠标中键旋转不了解决&#xff1a;特征树不显示参数关系 我的窗口去哪了&#xff1f;插曲&#xff1a;草图工具的调出插曲&#xff1a;颜色工具栏显示 弹窗警告警告&#xff1a;创建约束是临时…

linux系统介绍

Linux是一种免费使用和自由传播的类Unix操作系统&#xff0c;它是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。Linux起源于1991年&#xff0c;由芬兰程序员林纳斯托瓦兹&#xff08;Linus Torvalds&#xff09;创建&#xff0c;并迅速获得了全球开发者…

香橙派华为昇腾CANN架构编译opencv4.9

香橙派华为升腾AI盒子 为啥要编译opencv4.9.0&#xff0c; 因为在4.9.0 中增加了华为昇腾CANN的外接开发库&#xff0c;下图为盒子外观&#xff0c;此次一接到这个盒子&#xff0c;立刻开始开箱操作&#xff0c;首先就是要编译opencv4.9&#xff0c;以前在香橙派3588 的盒子中…

抖音极速版:抖音轻量精简版本,新人享大福利

和快手一样&#xff0c;抖音也有自己的极速版&#xff0c;可视作抖音的轻量精简版&#xff0c;更专注于刷视频看广告赚钱&#xff0c;收益比抖音要高&#xff0c;可玩性更佳。 抖音极速版简介 抖音极速版是一个提供短视频创业和收益任务的平台&#xff0c;用户可以通过观看广…

当前时机是否适合进入 AIGC 行业:行业发展与市场需求分析

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

下一代Docker会让部署更丝滑吗

下一代Docker会让部署更丝滑吗 如何通俗易懂的理解DockerDocker有什么缺点Docker与AI结合&#xff0c;会让部署更加丝滑吗 随着互联网技术的不断发展&#xff0c;单机系统已经无法满足日益正常的用户量以及正常处理用户请求&#xff0c;这个时候就需要进行多机部署&#xff0c;…

贝锐向日葵打造农机设备远程运维支持方案

当物联网“万物互联”的概念向第一产业赋能&#xff0c;农机设备的智能化程度也越来越高。 所谓农业物联网&#xff0c;即在应用层将大量的传感器节点构成监控网络&#xff0c;通过各种传感器采集信息&#xff0c;以帮助农民及时发现问题&#xff0c;并准确地判定发生问题的位…

1099: 希尔排序算法实现

解法&#xff1a; 希尔增量选定n/2&#xff0c; #include<iostream> #include<vector> using namespace std; int main() {int n;cin >> n;vector<int> vec(n);for (int i 0; i < n; i) cin >> vec[i];int d n / 2;for (int i 0; i <…

【C语言】指针运算

前言 前面在“走进指针世界”中我已经讲解过指针相关的很多前置知识&#xff0c;其实还有一个很重要的部分就是指针的运算。这篇博客&#xff0c;就让我们一起了解一下指针的运算吧&#xff01; 指针作为变量&#xff0c;是可以进行算术运算的&#xff0c;只不过情况会和整型…

上门服务系统开发|东邻到家系统|上门服务系统开发流程

上门服务小程序的开发流程是一个复杂且精细的过程&#xff0c;涉及到需求分析、设计规划、开发实施、测试验收以及上线运营等多个环节。下面将详细介绍上门服务小程序的开发流程&#xff0c;帮助读者全面了解并掌握其中的关键步骤。 一、需求分析 在开发上门服务小程序之前&am…

RedisTemplateAPI:String

文章目录 ⛄1 String 介绍⛄2 命令⛄3 对应 RedisTemplate API❄️❄️ 3.1 添加缓存❄️❄️ 3.2 设置过期时间(单独设置)❄️❄️ 3.3 获取缓存值❄️❄️ 3.4 删除key❄️❄️ 3.5 顺序递增❄️❄️ 3.6 顺序递减 ⛄4 以下是一些常用的API⛄5 应用场景 ⛄1 String 介绍 Str…

hive3从入门到精通(一)

Hive3入门至精通(基础、部署、理论、SQL、函数、运算以及性能优化)1-14章 第1章:数据仓库基础理论 1-1.数据仓库概念 数据仓库&#xff08;英语&#xff1a;Data Warehouse&#xff0c;简称数仓、DW&#xff09;,是一个用于存储、分析、报告的数据系统。 数据仓库的目的是构…

世界上首位AI程序员诞生,AI将成为人类的对手吗?

3月13日&#xff0c;世界上第一位AI程序员Devin诞生&#xff0c;不仅能自主学习新技术&#xff0c;自己改Bug&#xff0c;甚至还能训练和微调自己的AI模型&#xff0c;表现已然远超GPT-4等“顶流选手”。 AI的学习速度如此之快&#xff0c;人类的教育能否跟上“机器学习”的速…