C# 数据类型(var)

前两天自己写了一下dynamic这个函数的作用,而那次通过了解dynamic这个函数还知道了var这个函数,所以今天就特地看了一下var这个函数的一些作用以及要注意的事项

首先是这个函数是它的作用,它可以代替任何类型的数据定义,而且还会显示你所以定义的数据是什么类型的,通俗的说就是在自己不知道要定义的数据是什么类型的时候可以使用var这个函数,

但是这里有一个问题(我上一篇说的dynamic这个函数也可代替任何类型,它们的准确的界定在哪里?),留待自己更加精通时在解答,或者有高人在这里给指点一下更好

回归正题,var的使用要注意一些特点:

首先是定义var变量时要先给一个初始化的值。

然后是定义定义完初始变量后就不能再给变量赋值不同与于初始变量的类型,

这个var的使用就和之前dynamic函数的使用有一些不一样了,之前有写就不再赘述了

https://blog.csdn.net/pengjun_ge/article/details/114788524?spm=1001.2014.3001.5501

然后是var定义的数据类型都是局部变量

但是这个dynamic的变量类型也是局部的,所以这里也有一个疑问,希望有高人指点一下

最后就是使用var定义变量和object不同,它在效率上和使用强类型方式定义变量完全一样。

这里的理解就是,使用object函数的话,它是把数据直接定义成object类型的,而其余所以的数据类型都是基于object的,

在 C# 的统一类型系统中,所有类型(预定义类型、用户定义类型、引用类型和值类型)都是直接或间接从 Object 继承的。 可以将任何类型的值赋给 object 类型的变量。 将值类型的变量转换为对象的过程称为“装箱”。 将对象类型的变量转换为值类型的过程称为“拆箱”。

但是var就不一样了,它是在你初始赋值的时候就自动匹配了你说赋值的数据类型了

所以说var在效率上比object要快一点。

 

### C# 编程语言中的数据类型 C# 是一种强类型的语言,这意味着在编译时就必须知道变量的具体类型。C# 中的数据类型分为两大类:值类型(Value Types)和引用类型(Reference Types)。以下是详细的分类及其用法。 #### 值类型 (Value Types) 值类型表示存储实际数据的变量。它们直接包含其数据,并且当将一个值类型变量分配给另一个变量时,会复制该值的一个副本[^3]。 ##### 简单类型 简单类型是最基本的值类型,用于表示整数、浮点数、布尔值等原始数据。常见的简单类型如下: | 类型 | 关键字 | 大小 | 范围 | |------------|-----------|--------------|----------------------------------------| | 整数类型 | `int` | 4 字节 | -2,147,483,648 到 2,147,483,647 | | 长整型 | `long` | 8 字节 | -9,223,372,036,854,775,808 到 ... | | 浮点类型 | `float` | 4 字节 | ±()1.5 × 10^-45 至 ±3.4 × 10^38 | | 双精度类型 | `double` | 8 字节 | ±5.0 × 10^-324 至 ±1.7 × 10^308 | | 布尔类型 | `bool` | 不固定大小 | `true` 或 `false` | 示例代码: ```csharp int number = 10; float price = 19.99f; bool isAvailable = true; ``` ##### 枚举类型 (`enum`) 枚举是一种特殊的价值类型,它定义了一组命名常量。通过使用枚举,可以使程序更具可读性和安全性。 ```csharp public enum Days { Sunday, Monday, Tuesday }; Days day = Days.Monday; Console.WriteLine(day); // 输出 Monday ``` ##### 结构体 (`struct`) 结构体允许开发者创建自己的复杂价值类型。尽管它可以像类一样拥有字段和方法,但它属于值类型而非引用类型。 ```csharp public struct Point { public int X; public int Y; public Point(int x, int y) { this.X = x; this.Y = y; } } Point p = new Point(1, 2); Console.WriteLine($"X={p.X}, Y={p.Y}"); ``` #### 引用类型 (Reference Types) 引用类型不直接存储数据本身,而是存储指向堆内存中对象的指针。因此,在将引用类型变量赋值给其他变量时,实际上只是传递了对该对象的引用[^3]。 常见引用类型包括但不限于以下几种: - **字符串 (`string`)** 表示不可变字符序列的对象。 ```csharp string greeting = "Hello"; Console.WriteLine(greeting.ToUpper()); // HELLO ``` - **数组 (`Array`)** 数组是一系列具有相同类型的元素集合。可以通过索引来访问这些元素。 ```csharp int[] numbers = { 1, 2, 3 }; foreach (var num in numbers) { Console.Write(num + " "); // 输出 1 2 3 } ``` - **泛型集合 (`List<T>`, `Dictionary<TKey,TValue>`)** 提供更安全灵活的方式来管理动态数量的数据项。 ```csharp using System.Collections.Generic; List<int> list = new List<int>(); list.Add(1); list.Add(2); Dictionary<string, int> dict = new Dictionary<string, int>(); dict["one"] = 1; Console.WriteLine(dict.ContainsKey("one")); // True ``` - **类 (`class`)** 定义了一个蓝图,用来描述如何构建特定种类的对象实例。 ```csharp class Person { public string Name { get; set; } public void SayHello() => Console.WriteLine($"Hello from {Name}!"); } var person = new Person { Name = "Alice" }; person.SayHello(); // Hello from Alice! ``` #### 可空类型 (`Nullable<T>`) 对于某些场景下可能需要处理缺失或未知的情况,这时就可以利用可空类型。无论是采用显式形式还是简洁语法都可以实现这一目标[^2]。 ```csharp // 显式方式 Nullable<bool> flag = null; // 使用问号简化版 bool? anotherFlag = null; if (!anotherFlag.HasValue || !anotherFlag.Value) { Console.WriteLine("The value is either false or not present."); } ``` ---
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮卡冲撞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值