在 C# 中,数据类型能够分为如下几种类型:数据库
其中指针类型只在不安全代码下使用,通常不涉及因此今天不讨论。咱们主要探讨引用类型和值类型。编程
值类型的变量在声明后,系统直接在托管栈中为其分配内存并保存其数据,其中值类型包括:byte,short,int,long,float,double,decimal,char,bool 和 struct等,当咱们声明一个引用类型时,系统并不会马上在托管堆上分配空间,只有当咱们使用new实例化后,系统才在托管堆上开辟一个内存空间保存其数据,而且将地址保存到托管栈中, 引用类型包括数组、类、接口、委托、数据等, 因此引用类型不包含存储在变量中的实际数据,而是保存实际数据的引用,若有多个引用变量操做时,只要有一个变量将值改变,其余变量会自动反映这种值的变化,好比咱们申明了如下变量:c#
1 static void Main(string[] args) 2 { 3 string name = "高俊涛"; 4 int age = 20; 5 string className = "高三七班"; 6 Console.WriteLine($"姓名:{name}\n年龄:{age}\n班级:{className}"); 7 Console.ReadLine(); 8 }
那么按照上面的分析,因为age是值类型,name和className为引用类型,因此age直接在托管栈中保存变量和数据,而name和className则保存的是一个引用,这个引用指向托管堆,托管堆里面才保存相应的数据。数组
这二者既有联系又有区别,而且这两之间能够转化,就是咱们说的“装箱”操做和“拆箱”操做,相同点和不一样点总结以下:安全
虽然值类型和引用类型都继承自System.Object类。但几乎全部的引用类型都直接从System.Object继承,而值类型则继承其子类System.ValueType,
System.ValueType直接继承System.Object,但System.ValueType自己是一个类类型,而不是值类型;System.ValueType没有添加任何成员,但覆盖了所继承的一些方法,微信
使其更适合于值类型。此外须要特别注意的是string类型虽然为引用类型,但咱们在平时操做时却发现它更像值类型,这是由于操做符重载的结果,但它仍为引用类型。数据库设计
其数据类型的继承关系以下:函数
上面分析的c#的数据类型后,那么咱们可能会想到这些类型之间的相互转换,我么数据类型转换从根本上说是类型铸造,或者说是把数据从一种类型转换为另外一种类型。spa
在 C# 中,类型铸造有两种形式:设计
下面介绍三种常用的显示类型转换:
4.1 值类型的强制转换
(数据类型) 变量名或值。这种类型的强制转换一般使用在值类型之间。好比在数据库设计的时候,用户表(user)有性别字段Sex(0表明男,1表明女),咱们通常用bit或者int类型存储,界面上展现表明的值。这样的好处是:
可使代码更易于维护,有助于确保给变量指定合法的、指望的值。枚举使代码更清晰,容许用描述性的名称表示整数值,而不是用含义模糊的数来表示,那么咱们在编程的时候就须要进行枚举类型的转换。须要注意的是
这种类型的数值转换,若是有小数点转int型的时候系统不会四舍五入,而是简单的舍弃。 转换代码以下:
1 static void Main(string[] args) 2 { 3 //使用枚举定义变量 4 Gender gender = Gender.Male; 5 Console.WriteLine((int)gender); 6 Console.ReadLine(); 7 } 8 /// <summary> 9 /// 枚举:1表示男 2表示女 10 /// </summary> 11 public enum Gender : int 12 { 13 Male = 0, 14 Female = 1 15 }
4.2 强制类型转换Parse
这种类型的数值转换常用在字符串转数值型的状况下,须要注意的是,若是字符串必须是有效的数字形式,若是无效系统回给出异常信息,输入字符串的格式不正确。下面为字符串转数值和数值转字符串的代码:
1 static void Main(string[] args) 2 { 3 //有效类型的字符串转成值类型 4 double myDouble = double.Parse("88.88"); 5 float myFloat = float.Parse("88.66"); 6 int myInt = int.Parse("20"); 7 //将值类型转成字符串类型 8 string myDoubleToStr = myDouble.ToString(); 9 string myFloatToStr = myFloat.ToString(); 10 string myIntToStr = myInt.ToString(); 11 Console.WriteLine("myDoubleToStr={0},myFloatToStr={1},myIntToStr={2}", myDoubleToStr, myFloatToStr, myIntToStr); 12 Console.ReadLine(); 13 }
4.3 万能转换器强制转换Convert
Convert为万能转换函数,能够实现任意数据类型之间的转换,使用起来没有上面两种条件苛刻,因此推荐你们使用。须要注意的是,在小数转整型的时候,若是有小数点,处理的规则跟第一种强制类型转换不一样,
其处理规则为:
1 /// <summary> 2 /// 演示Parse进行数据转换 3 /// GHB BY 2020-07-10 4 /// </summary> 5 public static void ParseData() 6 { 7 8 double myDouble = double.Parse("88.5"); 9 float myFloat = float.Parse("87.5"); 10 int myInt = int.Parse("20"); 11 12 int myDoubleToInt = Convert.ToInt32(myDouble); 13 int myFloatToInt = Convert.ToInt32(myFloat); 14 double myIntToDouble = Convert.ToDouble(myInt); 15 16 Console.WriteLine( "myDouble={0}\nmyFloat={1}\nmyInt={2}\n" + 17 "myDoubleToInt ={3}\nmyFloatToInt={4}\nmyIntToDouble={5}\n", 18 myDouble, myFloat, myInt, 19 myDoubleToInt, myFloatToInt, myIntToDouble); 20 Console.ReadLine(); 21 }
从运行结果能够看到,88.5和87.5转化为整型的时候,都是88。
以上是本次分享的内容,咱们首先分析了C#的数据类型,以及值类型和引用类型的区别,最后介绍了三种类型转换的函数,以及他们的区别和使用场景,主要是对小数点的出来规则。
水平有限,有些地方可能不必定正确,欢迎你们批评指正。
|
做者 | 高红斌 | |||||
联系QQ | 2358643757 | ||||||
出处 | https://www.cnblogs.com/gaohongbin | ||||||
本文版权归做者和博客园共有,如需所有转载或者部分转载、摘录,请在文章明显位置注明做者和原文连接。 |