目录
一、数据类型
编辑
(一)值类型(基本数据类型)
(二)预定义引用类型
1.对象(Object)类型:
2.动态(Dynamic)类型
3.字符串(String)类型
4.数组(Array)类型
二、常用数据类型转换4个方法
(一)隐式转换
(二)显式转换
(三)使用Convert类进行类型转换
1.ToBoolean:将指定的值转换为布尔类型
2.ToByte:将指定的值转换为字节类型
3.ToInt16、ToInt32、ToInt64:将指定的值转换为短整型、整型或长整型
4.ToSingle、ToDouble、ToDecimal:将指定的值转换为单精度浮点型、双精度浮点型或十进制类型
5.ToString:将指定的值转换为字符串类型
(四) As运算符
三、常量
每个编程语言都有基本的数据类型,例如 C、C++、Java、Python、PHP、JavaScript、以及各种数据库等,而 C# 也不例外。下面是我用xmind画的思维导图(快速记忆)
值类型变量可以直接分配给一个值。它们是从类 System.ValueType 中派生的。值类型隐式继承于 System.ValueType,而 System.ValueType 隐式继承于 System.Object。在程序运行时,值类型的数据存储在内存栈中。
类型 | 值描述 | 范围 | 默认值 | 用法概述 |
---|---|---|---|---|
bool | 布尔值 | True 或 False | False | 它用于声明变量来存储布尔值 true 和 false。 |
byte | 8 位无符号整数 | 0 到 255 | 0 | 可显示转换为 int、long、double、float、decimal 类型 |
char | 16 位 Unicode 字符 | U +0000 到 U +ffff | '\0' | 用于声明 .NET framework 使用Unicode字符表示 System.Char 结构的实例;可显示转换为 short、int、long、float、double、decimal 类型。转为 string 类型,需使用 ToString() 方法。 |
decimal | 128 位精确的十进制值,28-29 有效位数 | (-7.9 x 1028 到 7.9 x 1028) / 100 到 28 | 0.0M | decimal 类型具有更高的精度和更小的范围,这使它适合于财务和货币计算,声明 decimal 类型变量使用后缀 m或M,转为 int、long、double、float 类型,需隐式转换。 |
double | 64 位双精度浮点型 | (+/-)5.0 x 10-324 到 (+/-)1.7 x 10308 | 0.0D | 声明 double 类型变量使用后缀 d或D;换为 int、long、float、decimal 类型,需隐式转换。 |
float | 32 位单精度浮点型 | -3.4 x 1038 到 + 3.4 x 1038 | 0.0F | 声明 float 类型变量使用后缀 f或F,可显示转换为 double 类型,转为 int、long、decimal 类型,需隐式转换。 |
int | 32 位有符号整数类型 | -2,147,483,648 到 2,147,483,647 | 0 | 可显示转换为 long、double、decimal、float 类型 |
long | 64 位有符号整数类型 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | 0L | 声明 long 类型变量使用后缀 l或L,可显示转换为 double、decimal、float 类型。 |
sbyte | 8 位有符号整数类型 | -128 到 127 | 0 | 可显示转换为 int、long、double、float、decimal 类型 |
short | 16 位有符号整数类型 | -32,768 到 32,767 | 0 | 可显示转换为 int、long、double、float、decimal 类型 |
uint | 32 位无符号整数类型 | 0 到 4,294,967,295 | 0 | 声明 uint 类型变量使用后缀 u或U,可显示转换为 long、double、decimal、float 类型。 |
ulong | 64 位无符号整数类型 | 0 到 18,446,744,073,709,551,615 | 0 | 声明 long 类型变量使用后缀 l或L,可显示转换为 double、decimal、float 类型。 |
ushort | 16 位无符号整数类型 | 0 到 65,535 | 0 | 可显示转换为 int、long、double、decimal、float 类型 |
引用类型的变量存储对实际数据的引用。
申明引用类型关键字:class、interface、delegate。
内置引用类型:dynamyic、object、string。
在 C# 的统一类型系统中,所有类型(预定义类型、用户定义类型、引用类型和值类型)都是直接或间接从 Object 继承的。 可以将任何类型的值赋给 object 类型的变量。将值类型的变量转换为对象的过程称为“装箱”。 将对象类型的变量转换为值类型的过程称为“取消装箱”。
using System;
namespace lian__xi
{
class Program
{
static void Main(string[] args)
{
int i = 123; //声明一个 int 类型的变量 i ,并初始化为 112;
object obj = i; //执行装箱操作;
Console.WriteLine("这是装箱操作:值为{0},装箱对象为{1}", i, obj);
int j = (int)obj; //执行拆箱操作;
Console.WriteLine("这是拆箱操作:装箱对象为{0},值为{1}", obj, j);
Console.ReadLine();
}
运行结果:
有趣的练习:
namespace lian__xi
{
class Program
{
static void Main(string[] args)
{
int i = 2023; //声明一个int类型变量i,并初始化为2023;
object object = i; //声明一个object类型的object,装箱;
Console.WriteLine("1、i的值为{0},装箱之后的对象为{1}", i, object);
i = 2022; //重新将i赋值为2022;
Console.WriteLine("2、i的值为{0},装箱之后的对象为{1}", i, object);
Console.ReadLine();
}
}
}
运行结果:从程序运行结果可以看出,值类型变量的值复制到装箱得到的对象中,装箱后改变值类型变量的值,不会影响装箱对象的值。可以理解为:值类型叫红红的小苹果,值就是某个苹果,箱子是篮子。因此,已经放进篮子里的苹果是不会变的,还没放进去的苹果是可以随意更换的。
您可以存储任何类型的值在动态数据类型变量中。这些变量的类型检查是在运行时发生的。
声明动态类型的语法:
dynamic d = 20;
字符串(String)类型 允许您给变量分配任何字符串值。字符串(String)类型是 System.String 类的别名。它是从对象(Object)类型派生的。字符串(String)类型的值可以通过两种形式进行分配:引号和 @引号。
例如:
string str1= "HI";
string str2 = @"I am zhc";
数组是一个存储相同类型元素的固定大小的顺序集合。数组是用来存储数据的集合,通常认为数组是一个同一类型变量的集合。
double[] arr1 = new double[10];
arr1[0] = 1230.0;
int [] arr2 = new int[5] { 0, 1, 2, 3, 4};
隐式转换遵循以下规则:
在C#中,隐式转换的规则如下:
从低精度类型到高精度类型的隐式转换是允许的。例如,从byte到int,从int到long,从float到double等。
从派生类型到基类类型的隐式转换是允许的。例如,从子类到父类。
枚举类型和整数类型之间存在隐式转换。例如,从int到enum类型。
字符类型(char)可以隐式转换为整数类型(如int)。
对象类型可以隐式转换为任何接口类型,只要该对象实现了该接口。
在数字类型之间的隐式转换是根据它们的大小顺序进行的。例如,从byte到short,从short到int,从int到long,从float到double等。
C#中的隐式转换不支持异构类型之间的转换,例如,在不同的数字类型之间进行隐式转换是不允许的,如int到float。
// 从低精度类型到高精度类型的隐式转换
byte b = 10;
int i = b; // byte到int的隐式转换
// 从派生类型到基类类型的隐式转换
class MyBaseClass { }
class MyDerivedClass : MyBaseClass { }
MyDerivedClass derivedObj = new MyDerivedClass();
MyBaseClass baseObj = derivedObj; // 子类到父类的隐式转换
// 枚举类型和整数类型之间的隐式转换
enum Color { Red, Green, Blue }
int colorValue = Color.Green; // 枚举到int的隐式转换
// 字符类型到整数类型的隐式转换
char c = 'A';
int asciiValue = c; // char到int的隐式转换
// 对象类型到接口类型的隐式转换
interface MyInterface { }
class MyClass : MyInterface { }
MyClass myObj = new MyClass();
MyInterface myInterface = myObj; // 对象到接口的隐式转换
// 数字类型之间的隐式转换
int intValue = 10;
long longValue = intValue; // int到long的隐式转换
// 隐式转换不支持异构类型之间的转换,下面代码不支持运行,错误示范:
int intVal = 10;
float floatVal = intVal; // 编译错误:无法进行int到float的隐式转换
使用强制转换运算符(例如:(type)value)将一个数据类型转换为另一个数据类型。如果转换是不安全的,即可能导致数据丢失或溢出,那么在进行强制转换之前需要进行类型检查。
int a = 10;
double b = (double)a; // 显式转换,将整数类型转换为浮点类型
float c = 5.5f;
int d = (int)c; // 显式转换,将浮点类型转换为整数类型,小数部分会被截断
以下是Convert类常用的一些方法:
string value = "True";
bool result = Convert.ToBoolean(value);
string value = "10";
byte result = Convert.ToByte(value);
string value = "100";
int result1 = Convert.ToInt16(value);
int result2 = Convert.ToInt32(value);
int result3 = Convert.ToInt64(value);
string value = "3.14";
float result = Convert.ToSingle(value);
int value = 100;
string result = Convert.ToString(value);
as运算符只能用于引用类型之间的转换,不能用于值类型之间的转换。如果尝试将一个值类型转换为另一个不兼容的值类型,会得到编译错误。下面是一个使用as运算符进行安全类型转换的示例:
object obj = "Hello World";
string str = obj as string;
if (str != null)
{
Console.WriteLine(str);
}
else
{
Console.WriteLine("转换失败");
}
在C#中,常量是指在程序中定义的一个不可更改的值。常量一旦被赋值后,就不能再被修改。常量可以用来存储一些固定的数值、字符串或其他常量表达式,并且在程序运行过程中保持不变。常量的值必须在编译时确定,不能在运行时改变。
using System;
class Program
{
// 定义常量
const int MaxValue = 100;
const string WelcomeMessage = "I am come from Wyu University!";
static void Main()
{
Console.WriteLine(MaxValue);
Console.WriteLine(WelcomeMessage);
// 尝试修改常量的值,会导致编译错误
// MaxValue = 200;
// WelcomeMessage = "Hello";
Console.ReadLine();
}
}
感谢观看,创作不易,请各位路过点个赞鼓励作者吧!