C# 入门教程(C#语法- 2.数据类型)
数据类型是编程语言中用于存储不同种类数据的分类。
graph LR
A[数据类型] --> B[整数类型-int long short byte]
A --> C[浮点数类型-float double decimal]
A --> D[字符类型-char]
A --> E[字符串类型-string]
A --> F[布尔类型-bool]
A --> G[数组类型-array]
A --> H[枚举类型-enum]
A --> I[时间日期类型-DateTime]
A --> J[集合类型-List Dictionary HashSet]
A --> K[对象类型-class struct]
下面是每种数据类型的简介以及示例代码:
整数类型(int、long、short、byte):
- 应用场景:这些整数类型用于表示整数值。
类型 | 取值范围 | 常见应用场景 |
---|---|---|
int | -2,147,483,648 到 2,147,483,647 | int 是最常用的整数类型,适合大多数常规整数计算,比如计数、索引、循环等。它通常用于表示年龄、数量、计数器等。 |
long | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | 当需要处理更大范围的整数时,例如处理时间戳、表示文件大小或内存使用量等大量数据时,使用 long 类型可以确保数值不会溢出。 |
short | -32,768 到 32,767 | short 类型通常用于需要节省内存空间的情况,或者在特定硬件或网络协议中要求使用 16 位整数进行通信或存储。 |
byte | 0 到 255 | byte 类型通常用于表示字节数据,比如图像数据、文件字节等。它也可用于表示位标志和布尔值。 |
选择合适的整数类型取决于所处理数据的范围和内存要求。若不确定具体使用哪个类型,一般来说,可以首先选择 int
类型作为默认整数类型,并在需要更大范围时转而使用 long
类型。对于需要节省内存或者明确知道数值范围的情况下,可以考虑使用 short
或 byte
类型。
示例代码:
using System;
class Program
{
static void Main()
{
int age = 20;
long population = 7000000000L;
short temperature = -10;
byte numberOfStudents = 30;
Console.WriteLine("年龄: " + age);
Console.WriteLine("人口数量: " + population);
Console.WriteLine("温度: " + temperature);
Console.WriteLine("学生人数: " + numberOfStudents);
}
}
浮点数类型(float、double、decimal):
- 应用场景:这些类型用于表示带有小数部分的数字。 float 和 double 适用于大多数浮点数计算,其中 double 提供更高的精度。 decimal 用于金融和货币计算等需要更高精度的场景。
数据类型 | 存储范围 | 精度 | 应用场景 |
---|---|---|---|
float | ±1.5 × 10-45 到 ±3.4 × 1038 | 约7位有效数字 | 科学计算、图形处理、大规模数据集合、性能要求较高的计算 |
double | ±5.0 × 10-324 到 ±1.7 × 10308 | 约15位有效数字 | 一般性计算、金融计算、工程计算、科学计算 |
decimal | ±1.0 x 10-28 到 ±7.9 x 1028 | 28-29位有效数字 | 货币计算、金融计算、税务计算、精确计数 |
示例代码:
using System;
class Program
{
static void Main()
{
float weight = 65.5f;
double pi = 3.1415926;
decimal price = 9.99m;
Console.WriteLine("体重: " + weight);
Console.WriteLine("圆周率: " + pi);
Console.WriteLine("价格: " + price);
}
}
字符类型(char):
- 应用场景:char 类型用于表示单个字符。它经常用于处理文本、字符串操作和字符级别的操作。
示例代码:
using System;
class Program
{
static void Main()
{
char grade = 'A';
char symbol = '$';
Console.WriteLine("等级: " + grade);
Console.WriteLine("符号: " + symbol);
}
}
字符串类型(string):
- 应用场景:string 类型用于表示一系列字符,通常用于处理和操作文本数据。
示例代码:
using System;
class Program
{
static void Main()
{
string name = "小张";
string sentence = "Hello, world!";
Console.WriteLine("姓名: " + name);
Console.WriteLine("句子: " + sentence);
}
}
布尔类型(bool):
- 应用场景:bool 类型用于表示逻辑上的真或假值。它通常用于条件判断和控制流程。
示例代码:
using System;
class Program
{
static void Main()
{
bool isStudent = true;
bool hasPermission = false;
Console.WriteLine("是否学生: " + isStudent);
Console.WriteLine("是否有权限: " + hasPermission);
}
}
数组类型(array):
- 应用场景:数组是一种用于存储多个相同类型元素的数据结构。它广泛应用于存储和处理集合数据。
示例代码:
using System;
class Program
{
static void Main()
{
int[] numbers = { 1, 2, 3, 4, 5 };
string[] names = { "小李", "小张", "小芳" };
Console.WriteLine("数字:");
foreach (int number in numbers)
{
Console.WriteLine(number);
}
Console.WriteLine("姓名:");
foreach (string name in names)
{
Console.WriteLine(name);
}
}
}
枚举类型(enum):
- 应用场景:枚举是一种用户定义的类型,用于定义一组命名的常量值。它们可以在代码中提供更好的可读性和可维护性。
示例代码:
using System;
enum DayOfWeek { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday }
class Program
{
static void Main()
{
DayOfWeek today = DayOfWeek.Monday;
Console.WriteLine("今天是 " + today);
}
}
时间日期类型(DateTime):
- 应用场景:DateTime 类型用于表示日期和时间。它广泛用于处理日期和时间相关的操作,例如计算时间间隔、格式化日期等。
示例代码:
using System;
class Program
{
static void Main()
{
// 获取当前日期和时间
DateTime now = DateTime.Now;
Console.WriteLine("当前日期和时间: " + now);
// 获取当前日期
DateTime today = DateTime.Today;
Console.WriteLine("当前日期: " + today);
// 格式化日期时间
string formattedDateTime = now.ToString("yyyy-MM-dd HH:mm:ss");
Console.WriteLine("格式化后的日期时间: " + formattedDateTime);
// 获取日期的年份、月份和日
int year = now.Year;
int month = now.Month;
int day = now.Day;
Console.WriteLine("年份: " + year);
Console.WriteLine("月份: " + month);
Console.WriteLine("日: " + day);
// 添加或减去时间间隔
DateTime futureDate = now.AddDays(7);
DateTime pastDate = now.AddMonths(-1);
Console.WriteLine("一周后的日期: " + futureDate);
Console.WriteLine("一个月前的日期: " + pastDate);
// 计算时间间隔
TimeSpan timeSpan = futureDate - now;
Console.WriteLine("时间间隔: " + timeSpan.Days + "天");
// 比较日期
DateTime date1 = new DateTime(2023, 9, 1);
DateTime date2 = new DateTime(2023, 9, 3);
int compareResult = DateTime.Compare(date1, date2);
Console.WriteLine("日期比较结果: " + compareResult);
// 判断闰年
bool isLeapYear = DateTime.IsLeapYear(year);
Console.WriteLine("是否为闰年: " + isLeapYear);
// 获取指定日期所在周的第一天和最后一天
DateTime firstDayOfWeek = GetFirstDayOfWeek(now);
DateTime lastDayOfWeek = GetLastDayOfWeek(now);
Console.WriteLine("本周第一天: " + firstDayOfWeek);
Console.WriteLine("本周最后一天: " + lastDayOfWeek);
}
static DateTime GetFirstDayOfWeek(DateTime date)
{
DayOfWeek dayOfWeek = date.DayOfWeek;
int daysToAdd = ((int)dayOfWeek - 1) * -1;
return date.AddDays(daysToAdd).Date;
}
static DateTime GetLastDayOfWeek(DateTime date)
{
DayOfWeek dayOfWeek = date.DayOfWeek;
int daysToAdd = 7 - (int)dayOfWeek;
return date.AddDays(daysToAdd).Date;
}
}
集合类型(List、Dictionary、HashSet):
- 应用场景:集合类型用于存储和操作多个元素的数据结构。
集合类型 | 特点 | 用途 |
---|---|---|
List |
有序、可重复的集合 | 存储任意类型的元素,按索引访问元素,动态添加、删除或修改元素。 |
Dictionary<TKey, TValue> | 键值对的集合 | 存储具有唯一键的元素,通过键快速查找和访问元素。 |
HashSet |
无序、唯一元素的集合 | 高效地检查元素是否存在,执行集合间的交集、并集、差集等操作。 |
简要介绍及区别总结:
List<T>
:List<T>
是一个有序的、可重复的集合,用于存储任意类型的元素。可以通过索引访问列表中的元素,并且可以动态地添加、删除或修改列表中的元素。例如:
using System;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
List<int> numbers = new List<int>();
numbers.Add(1);//index =0
numbers.Add(2);//index =1
numbers.Add(3);//index =2
Console.WriteLine(numbers[0]); // 输出结果为:1
numbers.RemoveAt(0);
Console.WriteLine(numbers[0]); // 输出结果为:2
Console.WriteLine(numbers.Count); // 输出结果为:2
}
}
Dictionary<TKey, TValue>
:Dictionary<TKey, TValue>
是一个键值对的集合,用于存储具有唯一键的元素。每个元素都由一个键和一个与之关联的值组成。可以通过键来访问、添加、修改或删除字典中的元素。例如:
using System;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
Dictionary<string, int> ages = new Dictionary<string, int>();
ages["小码"] = 25;
ages["小张"] = 30;
ages["小李"] = 35;
Console.WriteLine(ages["小张"]); // 输出结果为:30
ages.Remove("小码");
Console.WriteLine(ages.ContainsKey("小李123")); // 输出结果为:False
}
}
HashSet<T>
:HashSet<T>
是一个无序的、唯一元素的集合。它不允许重复的元素,并且可以高效地检查元素是否存在。可以向集合中添加、删除元素,以及执行集合间的交集、并集、差集等操作。例如:
using System;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
HashSet<string> fruits = new HashSet<string>();
fruits.Add("apple");
fruits.Add("banana");
fruits.Add("apple"); // 不会被添加,因为已经存在了
Console.WriteLine(fruits.Count); // 输出结果为:2
fruits.Remove("banana");
Console.WriteLine(fruits.Contains("banana")); // 输出结果为:False
}
}
Array和List都可应用于存储和处理集合数据,它俩的区别如下:
区别 | Array(数组) | List(列表) |
---|---|---|
大小 | 固定大小 | 可变大小 |
内存分配方式 | 分配连续内存块 | 动态数组分配和释放内存 |
元素访问和操作 | 索引直接访问和修改元素 | 提供丰富的方法进行操作 |
类型限制 | 可包含任意类型的元素 | 通常用于存储引用类型元素 |
API支持 | 提供基本方法和属性 | 提供更多丰富的方法和功能 |
这个表格可以帮助你更清楚地理解Array和List之间的差异。
对象类型(class、struct):
- 应用场景:对象类型用于创建自定义的数据类型和数据结构。class 和 struct 分别用于定义引用类型和值类型的对象。它们适用于创建具有属性和方法的自定义数据类型。
class和struct区别 示例代码:
using System;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public Person(string name, int age)
{
Name = name;
Age = age;
}
public void Greet()
{
Console.WriteLine("Hello, 我的名字是 {0} ,我已经 {1} 岁了.", Name, Age);
}
}
public struct Point
{
public int X { get; set; }
public int Y { get; set; }
public Point(int x, int y)
{
X = x;
Y = y;
}
public void PrintCoordinates()
{
Console.WriteLine("坐标: ({0}, {1})", X, Y);
}
}
public class Program
{
public static void Main(string[] args)
{
// 使用class创建对象
Person person = new Person("小马", 25);
person.Greet();
Console.WriteLine("姓名: {0}, 年龄: {1}", person.Name, person.Age);
// 使用struct创建对象
Point point = new Point(5, 10);
point.PrintCoordinates();
Console.WriteLine("X: {0}, Y: {1}", point.X, point.Y);
}
}
在上述示例中,我们定义了一个表示人员的class(Person)和一个表示二维坐标点的struct(Point)。我们创建了一个Person对象(person)和一个Point对象(point),并分别展示了它们的特点。
通过这个完整可运行的示例代码,可以清晰地看到class和struct的区别:
- class是引用类型,Person对象存储在堆上,而struct是值类型,Point对象存储在栈上。
- 传递class对象时,实际上传递的是对堆上对象的引用;传递struct对象时,会将整个值复制到新的变量中。
- class有自动生成的无参构造函数,而struct没有默认无参构造函数。
- class的对象可以为null,而struct的对象不可为null。
- class支持单继承和多层继承,而struct只能通过接口实现来达到类似的效果。
小结
这么多数据类型以及用法,不需要大家死记硬背,知道有它的存在就好,就像读书一样,很多时候我们不是读了立刻用起来,而是在将来的某一天,它会神助。
大家有任何问题都可以加关注后在评论区留言,或者加客服一对一咨询。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明