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

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

文章目录

  • 一、`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.lryc.cn/news/516751.html

相关文章:

  • Spring Boot 中 TypeExcludeFilter 的作用及使用示例
  • 解锁kafka组件安全性解决方案:打造全方位安全防线
  • 【C++数据结构——图】最小生成树(头歌实践教学平台习题) 【合集】
  • Java(1)入门基础
  • 2024.1.5总结
  • 【C语言程序设计——循环程序设计】枚举法换硬币(头歌实践教学平台习题)【合集】
  • 在调用 borrowObject 方法时,Apache Commons Pool 会根据连接池的配置触发一系列相关的方法
  • Linux中的tty和pts概念和区别
  • 【SOC 芯片设计 DFT 学习专栏 -- RTL 中的信号名和 Netlist 中的信号名差异】
  • 机器学习经典算法——线性回归
  • MLU上使用MagicMind GFPGANv1.4 onnx加速!
  • VulnHub—potato-suncs
  • 【Flink CDC】Flink CDC的Schema Evolution表结构演变的源码分析和流程图
  • 【智能算法】改进蚁狮优化算法【matlab】
  • swagger导出json
  • Go语言的 的引用数据类型(Reference Data Types)核心知识
  • JAVA解析Excel复杂表头
  • jmeter 中 BeanShell 预处理程序、JSR223后置处理程序使用示例
  • 我的创作纪念日——《惊变128天》
  • vuedraggable 选项介绍
  • 微信小程序获取后端数据
  • ThreadLocal` 的工作原理
  • 数据挖掘教学指南:从基础到应用
  • 大模型搜索引擎增强问答demo-纯python实现
  • 【C语言程序设计——选择结构程序设计】按从小到大排序三个数(头歌实践教学平台习题)【合集】
  • 简洁安装配置在Windows环境下使用vscode开发pytorch
  • conda安装及demo:SadTalker实现图片+音频生成高质量视频
  • 【面试】后端开发面试中常见数据结构及应用场景、原理总结
  • 141.《mac m系列芯片安装mongodb详细教程》
  • Java 23 集合框架详解:ArrayList、LinkedList、Vector