文章目录
C#常用的数据类型
在C#中,数据类型用于定义变量和常量可以存储的数据的种类。C#提供了多种数据类型,可以分为两大类:值类型和引用类型。
3.3.1 数值类型
在C#中,数值类型是用于存储数值的数据类型,它们可以进一步分为整数类型和实数类型。以下是C#中常用的数值类型及其代码示例:
整数类型
数据类型 | 位大小 | 范围(有符号) | 范围(无符号) | 代码示例 |
---|---|---|---|---|
byte | 8位 | 0 到 255 | 0 到 255 | byte b = 255; |
sbyte | 8位 | -128 到 127 | 不适用 | sbyte sb = 127; |
short | 16位 | -32,768 到 32,767 | 不适用 | short s = 32767; |
ushort | 16位 | 0 到 65,535 | 0 到 65,535 | ushort us = 65535; |
int | 32位 | -2,147,483,648 到 2,147,483,647 | 不适用 | int i = 1000000; |
uint | 32位 | 0 到 4,294,967,295 | 0 到 4,294,967,295 | uint ui = 4294967295u; |
long | 64位 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | 不适用 | long l = 9223372036854775807; |
ulong | 64位 | 0 到 18,446,744,073,709,551,615 | 0 到 18,446,744,073,709,551,615 | ulong ul = 18446744073709551615; |
实数类型
数据类型 | 描述 | 代码示例 |
---|---|---|
float | 单精度浮点数,遵循IEEE 754标准 | float f = 1.5f; |
double | 双精度浮点数,遵循IEEE 754标准 | double d = 1.5; |
decimal | 用于精确的货币和测量计算 | decimal m = 1.5m; |
特殊数值的计算示例
using System;
class Program
{
static void Main()
{
// 整数类型示例
byte b = 255;
sbyte sb = 127;
short s = 32767;
ushort us = 65535;
int i = 1000000;
uint ui = 4294967295u;
long l = 9223372036854775807;
ulong ul = 18446744073709551615;
// 实数类型示例
float f = 1.5f;
double d = 1.5;
decimal m = 1.5m;
// 特殊数值的计算
Console.WriteLine("Max value of byte: " + byte.MaxValue);
Console.WriteLine("Max value of int: " + int.MaxValue);
Console.WriteLine("Max value of float: " + float.MaxValue);
Console.WriteLine("Max value of decimal: " + decimal.MaxValue);
// 计算
int sum = i + b;
Console.WriteLine("Sum of int and byte: " + sum);
double area = Math.PI * f * f; // 使用float值计算圆的面积
Console.WriteLine("Area of circle with radius 1.5f: " + area);
decimal price = 19.99m;
decimal taxRate = 0.07m;
decimal total = price + (price * taxRate);
Console.WriteLine("Total price including tax: " + total);
}
}
在这个示例中,声明了各种整数和实数类型的变量,并为它们赋了初值。然后使用这些变量进行了一些计算,包括求和、计算圆的面积以及计算含税总价。这些示例展示了如何在C#中使用不同的数值类型进行基本的数值计算。
3.3.2字符和字符串类型
在C#中,字符和字符串是处理文本数据的基本类型。
字符类型
C#中的字符类型是char
,它是一个16位的Unicode字符。char
类型可以存储任何字符,如字母、数字、标点符号等。
常用转义字符:
转义字符 | 描述 |
---|---|
\\ | 反斜杠 |
\' | 单引号 |
\" | 双引号 |
\n | 换行符 |
\r | 回车符 |
\t | 制表符(Tab) |
\0 | 空字符(null terminator) |
字符类型示例:
char letter = 'A'; // 普通字符
char newline = '\n'; // 转义字符,换行
char backslash = '\\'; // 转义字符,反斜杠
字符串类型
字符串类型在C#中是通过string
类实现的。string
类型是不可变的,这意味着一旦创建,其内容不能被改变。字符串可以是单个字符,也可以是字符序列。
字符串类型示例:
string greeting = "Hello, World!";
string path = @"C:\Program Files\Example"; // 包含反斜杠的字符串
string multiline = @"First line
Second line"; // 多行字符串
string unicode = "\u03A9"; // 希腊字母大写的Omega
在上述代码中,我们创建了几个字符串变量。注意,@
符号允许字符串包含反斜杠而不需要转义,这在路径字符串中非常有用。
字符串操作示例:
using System;
class Program
{
static void Main()
{
// 字符串连接
string firstName = "John";
string lastName = "Doe";
string fullName = firstName + " " + lastName; // 使用 + 运算符
Console.WriteLine(fullName);
// 使用String.Format
string formattedName = String.Format("{0} {1}", firstName, lastName);
Console.WriteLine(formattedName);
// 字符串插值
string interpolatedName = $"{firstName} {lastName}";
Console.WriteLine(interpolatedName);
// 字符串长度
string text = "Sample text";
Console.WriteLine($"Length of the text: {text.Length}");
// 字符串比较
string str1 = "Hello";
string str2 = "hello";
Console.WriteLine($"str1 equals str2 (case-sensitive): {str1 == str2}");
Console.WriteLine($"str1 equals str2 (case-insensitive): {str1.Equals(str2, StringComparison.OrdinalIgnoreCase)}");
// 字符串查找
string sentence = "The quick brown fox jumps over the lazy dog";
int index = sentence.IndexOf("fox");
Console.WriteLine($"The word 'fox' is found at index: {index}");
}
}
在这个示例中,展示了字符串连接、使用String.Format
进行格式化、字符串插值、获取字符串长度、字符串比较(区分大小写和不区分大小写)以及在字符串中查找子字符串的索引位置。这些是处理字符串时常用的操作。
3.3.3 布尔类型和对象类型
当然,让我们通过一些简单的例子来展示布尔类型和对象类型在C#中的使用。
布尔类型(bool
)
布尔类型用来表示逻辑上的真假值。以下是布尔类型的基本示例:
using System;
class Program
{
static void Main()
{
bool isRaining = true; // 假设正在下雨
bool isUmbrellaNeeded = isRaining; // 根据是否下雨来决定是否需要带伞
Console.WriteLine("Is it raining? " + isRaining); // 输出: Is it raining? True
Console.WriteLine("Do you need an umbrella? " + isUmbrellaNeeded); // 输出: Do you need an umbrella? True
}
}
在这个例子中,声明了一个布尔变量isRaining
来表示是否正在下雨,然后根据这个值设置另一个布尔变量isUmbrellaNeeded
来表示是否需要带伞。
对象类型(object
)
对象类型是所有类的基类,可以用来引用任何类型的对象。以下是对象类型的基本示例:
using System;
class Program
{
static void Main()
{
object myObject = "Hello, World!"; // 将字符串赋值给object类型的变量
Console.WriteLine(myObject); // 输出: Hello, World!
Console.WriteLine(myObject.GetType().Name); // 输出: String
}
}
在这个例子中,我们声明了一个object
类型的变量myObject
,并将其初始化为一个字符串。然后,我们输出这个对象及其类型名称。
布尔类型和对象类型的结合使用
让我们通过一个简单的例子来展示如何在实际程序中结合使用布尔类型和对象类型:
using System;
class Program
{
static void Main()
{
bool is会员卡有效 = true; // 假设会员卡是有效的
object 会员卡折扣 = null; // 用于存储会员卡的折扣信息
if (is会员卡有效)
{
会员卡折扣 = 0.9; // 如果会员卡有效,设置折扣为90%
}
Console.WriteLine("会员卡有效: " + is会员卡有效); // 输出: 会员卡有效: True
if (会员卡折扣 != null)
{
Console.WriteLine("您的会员卡折扣是: " + 会员卡折扣 * 100 + "%"); // 输出: 您的会员卡折扣是: 90%
}
}
}
在这个例子中,首先声明了一个布尔变量is会员卡有效
来表示会员卡是否有效,然后根据这个值设置了一个object
类型的变量会员卡折扣
来存储折扣信息。使用if
语句来判断会员卡是否有效,并据此设置折扣。最后输出会员卡的有效状态和折扣信息。这个例子展示了如何在实际程序中根据条件动态设置对象类型的值。
3.3.4 枚举类型
- 枚举(enum)是值类型的一种特殊形式,基本格式如下:
[修饰符] enum 枚举类型名[: 基类型] { 由逗号分隔的枚举数标识符 } ;
- 例如:
enum Days {Sun,Mon,Tue,Wed,Thu,Fri,sat};
enum Days {Mon=1,Tue,Wed,Thu,Fri,Sat,Sun};
enum MonthNames {January=31,February=28,March=31,April=30};
enum MonthNames : byte { January=31, February=28, March=31, April=30 };
3.3.5 引用类型
- 类(class):一组具有相同数据结构和相同操作的对象集合。
- 接口(interface)
- 委托(delegate)
- 数组(array):包含若干相同类型元素的一组变量。
3.3.6 类型转换
在C#中,类型转换是将一种数据类型转换为另一种数据类型的过程。类型转换可以是隐式的,也可以是显式的。
隐式转换(Implicit Conversion)
隐式转换是指在转换过程中不需要显式指定,编译器会自动进行的转换。隐式转换通常发生在从较小范围或精度的类型转换为较大范围或精度的类型时。
隐式转换示例:
int num = 100; // 整型
long longNum = num; // 从 int 到 long 是隐式转换
double doubleNum = num; // 从 int 到 double 也是隐式转换
在这个例子中,num
被隐式转换为 long
和 double
类型,因为这两种类型可以容纳 int
类型的所有可能值。
显式转换(Explicit Conversion)
显式转换是指需要使用类型转换运算符进行的转换。显式转换通常发生在从较大范围或精度的类型转换为较小范围或精度的类型时,因为可能会丢失数据或精度。
显式转换示例:
double doubleNum = 123.456;
int num = (int)doubleNum; // 从 double 到 int 需要显式转换
在这个例子中,doubleNum
被显式转换为 int
类型,这会导致小数部分被截断。
使用方法进行数据类型的转换
C# 提供了一些方法来进行数据类型的转换,这些方法可以处理隐式和显式转换无法解决的情况。
Convert
类:提供了一系列静态方法,用于在各种数据类型之间进行转换。Parse
方法:用于将字符串转换为特定的数据类型。ToString
方法:用于将数据类型转换为字符串。
使用方法进行数据类型转换的示例:
using System;
class Program
{
static void Main()
{
// 使用 Convert 类进行转换
int intNum = 123;
double doubleNum = Convert.ToDouble(intNum); // 隐式转换
Console.WriteLine(doubleNum);
// 使用 Parse 方法将字符串转换为数字
string numberStr = "456";
int parsedInt = Int32.Parse(numberStr); // 显式转换
Console.WriteLine(parsedInt);
// 使用 ToString 方法将数字转换为字符串
int anotherNum = 789;
string numStr = anotherNum.ToString(); // 隐式转换
Console.WriteLine(numStr);
// 使用 ToString 并指定格式
string formattedNumStr = doubleNum.ToString("F2"); // 格式化为两位小数的字符串
Console.WriteLine(formattedNumStr);
}
}
在这个例子中,使用了 Convert
类来将 int
隐式转换为 double
,使用了 Parse
方法将字符串显式转换为 int
,使用了 ToString
方法将 int
隐式转换为字符串,并且使用 ToString
方法的格式化功能将 double
转换为格式化的字符串。
类型转换是C#编程中的一个重要概念,正确使用类型转换可以避免数据丢失和程序错误。