【从零开始入门unity游戏开发之——C#篇44】C#补充知识——var隐式类型、初始化器、匿名类型

news/2025/1/7 22:50:44/

文章目录

  • 一、`var`隐式类型
    • 1、var 的基本用法
    • 2、注意
    • 3、总结
  • 二、初始化器
    • 1、类定义
    • 2、对象初始化器
    • 3、集合初始化
      • 3.1 数组初始化
      • 3.2 List<T> 初始化
      • 3.3 Dictionary<TKey, TValue> 初始化
  • 三、匿名类型
    • 1、示例代码
    • 2、匿名类型的限制:
  • 专栏推荐
  • 完结

一、var隐式类型

var是一种特殊的变量类型,它可以用来表示任意类型的变量。

1、var 的基本用法

var number = 10; // 隐式推断为 int 类型
var name = "Alice"; // 隐式推断为 string 类型

2、注意

  • var必须初始化
    -
  • var不能作为类的成员只能用于临时变量申明时,也就是一般写在函数语句块中
    在这里插入图片描述

3、总结

虽然 var 是 C# 中一个非常有用的工具,可以提高代码的简洁性和可维护性,但过度或不当使用会降低代码的可读性和清晰度,特别是在类型不容易推断或变量意义不明确时。因此,最佳实践是根据上下文决定是否使用 var,并且在类型显而易见或代码更简洁时使用 var,否则建议显式声明类型,以提高代码的可读性和维护性。

不过个人建议还是少用var


二、初始化器

申明对象时,可以通过直接写大括号的形式初始化公共成员遍历和属性

1、类定义

首先,我们定义了一个 Test 类,它有一些字段、公共属性和构造函数。注意,i1 是私有字段,不能通过对象初始化器直接赋值;而 i2、str 和 Name 都是公有的,可以通过初始化器赋值。

class Test 
{private int i1;  // 私有字段,不能通过对象初始化器赋值public int i2;   // 公共字段,可以通过对象初始化器赋值public string str;  // 公共字段,可以通过对象初始化器赋值public string Name { get; set; }  // 公共属性,可以通过对象初始化器赋值// 无参构造函数public Test() { }// 有参构造函数,接受一个参数 i1public Test(int i1) {this.i1 = i1;  // 初始化私有字段}
}

2、对象初始化器

我们可以在创建对象时直接为公共成员赋值。

  • 无参构造函数的初始化

    Test test3 = new Test() { i2 = 2, str = "内容", Name = "向宇的客栈"};
    

    括号的使用是可选的,因为调用无参构造函数时,new Test {}new Test() {}是等价的。括号的存在主要是为了增强可读性或在一些情况下要求明确调用构造函数。

    Test test2 = new Test { i2 = 2, str = "内容", Name = "向宇的客栈"};
    
  • 有参构造函数的初始化

    Test test4 = new Test(100) { i2 = 2, str = "内容", Name = "向宇的客栈"};
    

3、集合初始化

在 C# 中,集合初始化是一种非常常见的操作,可以在声明集合对象的同时直接为其元素赋初值。这种方式简洁高效,常用于数组、List 和 Dictionary 的初始化。

申明集合对象(比如数组、列表、字典)时,也可以通过大括号,直接初始化内部属性

3.1 数组初始化

  • 显式指定大小并初始化:

    int[] array1 = new int[10] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    
  • 推断大小并初始化:

    int[] array2 = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    
  • 省略 new,直接初始化:

    int[] array3 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    

3.2 List 初始化

List<Test> list = new List<Test> { test1, test2, test3, test4 };

3.3 Dictionary<TKey, TValue> 初始化

Dictionary<int, string> dir = new Dictionary<int, string> {{ 1, "向宇1" },{ 2, "向宇2" },{ 3, "向宇3" }
};

三、匿名类型

在 C# 中,匿名类型 是一种没有显式类型名称的类型。它通常用于快速创建仅包含数据的对象,一旦初始化后,其属性值就不能再改变。

1、示例代码

// 定义匿名类型,并初始化属性
var v = new { age = 10, name = "向宇", sex = "男" };// 访问匿名类型的属性
Console.WriteLine(v.age);   // 输出: 10
Console.WriteLine(v.name);  // 输出: 向宇
Console.WriteLine(v.sex);   // 输出: 男

2、匿名类型的限制:

  • var 类型推断:匿名类型需要使用 var 关键字来声明变量,因为匿名类型没有显式的类型名称。这样编译器可以自动推断出正确的类型。

  • 不能修改属性:匿名类型的属性是只读的,所以无法在后续代码中修改其值。例如,以下代码会导致编译错误:

    v.age = 20;  // 错误:无法修改只读属性
    
  • 只能包含属性(字段):匿名类型是用来存储数据的简单容器,它只能包含属性(字段),不能包含方法、事件或构造函数。


专栏推荐

地址
【从零开始入门unity游戏开发之——C#篇】
【从零开始入门unity游戏开发之——unity篇】
【制作100个Unity游戏】
【推荐100个unity插件】
【实现100个unity特效】
unity框架开发】

完结

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

好了,我是向宇,https://xiangyu.blog.csdn.net

一位在小公司默默奋斗的开发者,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!如果你遇到任何问题,也欢迎你评论私信或者加群找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~
在这里插入图片描述


http://www.ppmy.cn/news/1561388.html

相关文章

flask后端开发(13):登录功能后端实现和钩子函数

目录 一、登录后端逻辑二、Session会话维持三、钩子函数四、前端登录与非登录状态切换 一、登录后端逻辑 还是检查页面的请求&#xff0c;是GET还是POST&#xff0c;GET一般是向服务器请求静态资源&#xff0c;POST是向服务器提交/上传信息 如果是GET&#xff0c;那就是得到静…

字玩FontPlayer开发笔记4 性能优化 首屏加载时间优化

字玩FontPlayer开发笔记4 性能优化 首屏加载时间优化 字玩FontPlayer是笔者开源的一款字体设计工具&#xff0c;使用Vue3 ElementUI开发&#xff0c;源代码&#xff1a; github: https://github.com/HiToysMaker/fontplayer gitee: https://gitee.com/toysmaker/fontplayer …

【优选算法 分治】深入理解分治算法:分治算法入门小专题详解

快速排序算法 (1) 快速排序法 (2) 快排前后指针 (3) 快排挖坑法 颜色分类 题目解析 算法原理 算法原理和移动零非常相似 简述移动零的算法原理 cur 在从前往后扫描的过程中&#xff0c;如果扫描的数符合 f 性质&#xff0c;就把这个数放到 dest 之…

用JAVA实现人工智能:采用框架Spring AI Java

Spring AI 集成人工智能&#xff0c;为Java项目添加AI功能指南 本文主旨是用实际的可操作的代码&#xff0c;介绍Java怎么通过spring ai 接入大模型。 例子使用spring ai alibaba QWen千问api完成&#xff0c;你可以跑通以后换自己的实现。QWen目前有100万免费Token额度&…

JuiceFS 详解:一款为云原生设计的高性能分布式文件系统

JuiceFS 详解&#xff1a;一款为云原生设计的高性能分布式文件系统 1. 什么是 JuiceFS&#xff1f; JuiceFS&#xff08;Juiced File System&#xff09;是一款高性能、POSIX 兼容的云原生分布式文件系统。它采用对象存储作为底层存储&#xff0c;支持多种元数据引擎&#xf…

Synthesia技术浅析(二):虚拟人物视频生成

Synthesia 的虚拟人物视频生成模块是其核心技术之一&#xff0c;能够将文本输入转换为带有同步语音和口型的虚拟人物视频。该模块如下所示&#xff1a; 1.文本输入处理 2.语音生成&#xff08;TTS, Text-to-Speech&#xff09; 3.口型同步&#xff08;Lip Syncing&#xff0…

YOLOV8涨点之融合自适应特征融合注意机制

基本架构 YOLOv8继承和发展了先前版本的设计理念,采用 三部分结构 :主干网络(Backbone)、特征融合网络(Neck)和检测头(Head)。这种模块化设计使模型能够灵活应对不同规模的任务需求: Backbone部分使用 C2f模块 替代了YOLOv5中的C3模块,实现了进一步的轻量化。 Neck部分采用…

MySQL 11 章——数据处理之增删改

一、插入数据 &#xff08;1&#xff09;实际问题 如果我们要想表中插入新的记录&#xff0c;那么解决方式&#xff1a;使用INSERT语句向表中插入数据 &#xff08;2&#xff09;方式一&#xff1a;VALUES的方式添加 方式一就是一条一条地添加数据演示代码&#xff1a; CRE…