C# 数据类型及相互转换及常用基础

C#的数据类型可以分为3类:数值类型、引用类型、指针类型。指针类型仅在不安全代码中使用。
值类型包括简单类型(如字符型、浮点型和整数型等)、集合类型和结构型。
引用类型包括类类型、接口类型、代表类型和数组类型。
值类型和引用类型的不同之处是值类型的变量值直接包含数据,而引用类型的变量把它们的引用存储在对象中。对于引用类型的变量,完全有可能让两个不同的变量引用同一个对象,这样一来,对其中一个变量的操作就会影响到被另一个变量引用的对象。对于值类型的变量而言,每一个变量有它们自己的数值,因此对其中一个变量的操作不可能影响到另外一个变量。
类型之间的转换
位数少的转换为位数多的,可以使用隐式转换;
位数多的转换为位数少的,要使用显式转换。
数据类型范围默认值示例
byteSystem.Byte 无符号整数 8位
-128 到 127
0
sbyteSystem.SByte 有符号整数
8 -128 到 127
0
intSystem.Int32 有符号整数 32
-2,147,483,648 到 2,147,483,647
0
uintSystem.UInt32 无符号整数 32
0 到 4294967295
0
shortSystem.Int16 有符号整数 16
-32,768 到 32,767
0
ushortSystem.UInt16 无符号整数 16
0 到 65535
0
longSystem.Int64 有符号整数 64
-922337203685477508 到 922337203685477507
0
ulongSystem.UInt64 无符号整数 64
0 到 18446744073709551615
0
floatSystem.Single 单精度浮点类型 32
-3.402823e38 到 3.402823e38
0.0F
doubleSystem.Double 双精度浮点类型 64
-1.79769313486232e308 到 1.79769313486232e308
0.0D

charSystem.Char 单个 Unicode 字符 16
用在文本中的 Unicode 符号
\x0000
boolSystem.Boolean 逻辑 Boolean 类型 8
true 或 false
false
objectSystem.Object
所有其他类型的基本类型
stringSystem.String
字符序列
decimalSystem.Decimal 可以表示具有 29 个有效位的小数的精确分数或整数类型 128
-2 x 10-96 到 2 x 1096
0.0M

常用格式举例:
(1) int i=12345;
this.textBox1.Text=i.ToString();
(6) DateTime dt =new DateTime(2003,5,25);
this.textBox1.Text=dt.ToString("yy.M.d");
//结果 03.5.25
this.textBox2.Text=dt.ToString(“yyyy年M月”);
//结果 2003年5月
(7) int i=123;
double j=123.45;
string s=string.Format("i:{0,-7},j:{1,7}",i,j);
//-7表示左对齐,占7位
this.textBox1.Text=s ;
//结果i:123 ,j: 123.45

//结果 12345(this指当前对象,或叫当前类的实例)
this.textBox2.Text=i.ToString("d8");
//结果 00012345
(2) int i=123;
double j=123.45;
string s1=string.Format("the value is {0,7:d}",i);
string s2=string.Format("the value is {0,7:f3}",j);
this.textBox1.Text=s1 ;
//结果 the value is 123
this.textBox2.Text=s2;
//结果 the value is 123.450
(3) double i=12345.6789
this.textBox1.Text=i.ToString("f2");//结果 12345.68
(4)double i=12345.6789;
this.textBox1.Text=i.ToString("n"); //结果 12,345.68
this.textBox2.Text=i.ToString(“n4”); //结果 12,345.6789
(5)double i=0.126;
string s=string.Format("the value is {0:p}",i);
this.textBox1.Text=i.ToString("p"); //结果 12.6%
this.textBox2.Text=s; //结果 the value is 12.6%


数组
特点:所有的元素类型都相同。
//一维数组

string[] arr={"c","c++"};
string[] mystrings=new string[3];
int[] intArr1=new int[4]{0,1,2,3};
int[] intArr2={5,6,7};
int nvar=5;
//二维数组
int[,] arr = {{0,1}, {2,3}, {4,5}};
int[,] myArr = new int[5,3];
//锯齿型数组
string[][] stra=new string[3][];
stra[0]=new string[2]{"a11","a12"};
stra[1]=new string[3]{"b11","b12","b13"};
stra[2]=new string[5]{"a","e","i","o","u"};


类型之间的转换
位数少的转换为位数多的,可以使用隐式转换;
位数多的转换为位数少的,要使用显式转换。

装箱和拆箱
int i=123; //数值类型
object box=i; //装箱操作
int j=(int)box; //拆箱操作


值类型
所有的值类型都隐含地声明了一个公共的无参数的构造函数,这个构造函数叫做默认构造函数。默认构造函数返回一个初始为零的值类型的实例,称之为默认值。
对于sbyte、byte、short、ushort、int、uint、long、ulong ,默认值为0。
对于char,默认值是‘\x0000’
对于float,默认值是0.0F
对于double,默认值是0.0D
对于decimal,默认值是0.0M
对于bool,默认值是false
对于一个枚举类型,默认值是0
对于一个结构类型,默认值的设置就是把所有值类型的 域都设置为它们各自的默认值,把所有的引用类型的域赋为空

简单类型

C#提供一套预定义的结构类型叫做简单类型。简单类型用保留字定义,这些保留字仅仅是在System名字空间里预定义的结构类型的化名。比如int是保留字,System.Int32是在System名字空间中预定义类型。一个简单类型和它化名的结构类型是完全一样的,也就是说写int和写System.Int32是一样的。
简单类型主要有整型、浮点类型、小数类型、布尔类型、字符型

整型
C#中支持9种整型:sbyte、byte、short、ushort、int、 uint、long、ulong和char。

Sbyte:代表有符号的8位整数,数值范围从-128 ~ 127
Byte:代表无符号的8位整数,数值范围从0~255
Short:代表有符号的16位整数,范围从-32768 ~ 32767
ushort:代表有符号的16位整数,范围从-32768 ~ 32767
Int:代表有符号的32位整数,范围从-2147483648 ~ 2147483648
uint:代表无符号的32位整数,范围从0 ~ 4294967295
Long:代表有符号的64位整数,范围从 -9223372036854775808 ~ 9223372036854775808
Ulong:代表无符号的64位整数,范围从 0 ~ 18446744073709551615
char:代表无符号的16位整数,数值范围从0~65535。
Char类型的可能值对应于统一字符编码标准(Unicode)的字符集。
Char类型与其他整数类型相比有以下两点不同之处:
1、没有其他类型到char类型的隐式转换。即使是对于sbyte,byte和ushort这样能完全使用char类型代表其值的类型, sbyte,byte和ushort到char的隐式转换也不存在。
2、char类型的常量必须被写为字符形式,如果用整数形式,则必须带有类型转换前缀。比如(char)10
赋值形式有三种:
char chsomechar=“A”;
char chsomechar=“\x0065”; 十六进制
char chsomechar=“\u0065 ; unicode表示法

字符型中有下列转义符:
转义符转义符转义符转义符
\‘ 用来表示单引号\t 用来表示水平tab\” 用来表示双引号\f 用来表示换页
\\ 用来表示反斜杠\v 用来表示垂直tab\0 表示空字符\n 用来表示换行
\a 用来表示感叹号\r 用来表示回车\b 用来表示退格

浮点类型

C#支持两种浮点类型:float和double。
Float型所能表示的值的范围大约可以从1.5*10^-45~3.4* 10^38,精确到小数点后面7位。
Double型所能表示的值的范围大约可以从5.0*10^-324~1.7* 10^308,精确到小数点后面15位或16位。
如果二元操作中的其中一个操作数为浮点类型,那么另外一个操作数是整型或浮点类型,运算规则如下:
1、如果其中一个操作数是整型,则操作数被转换为另一个操作数的浮点数类型;
2、如果操作数之一为double,则另一操作数也被转换成double类型,运算以double类型的精度和取值范围进行,并且所得结果也为double类型;
3、否则,运算至少将以float类型的取值范围和精度进行,并且所得结果也为float型。

小数(decimal)类型

小数类型非常适用于金融和货币运算。数值范围从1.0*10^-28~7.9* 10^28,精确到小数点后面28位。
如果二元操作中的其中一个操作数是小数类型,那么另外一个从操作数是整型或小数类型。整型在运算前被转化为小数类型数。
如果一个小数类型的算术运算产生了一个对于小数类型的格式来说太小的值,操作的结果将会变成0。
如果一个小数类型的算术运算产生了一个对于小数类型的格式来说太大的值,就会触发溢出错误。
小数类型较浮点类型而言,具有更大的精确度,但是数值范围相对小了很多。
将浮点类型的数向小数类型的数转化时会产生溢出错误,将小数类型的数向浮点类型的数转化时会造成精确度的损失。因此,两种类型不存在隐式或显式转换。

布尔型:值为true或false。没有标准能实现布尔类型和其他类型的转换。
枚举类型:枚举类型的元素使用的类型只能是long、int、short、byte。默认类型是int。默认第一个元素的值是0,每一个连续的元素按1递增。可以给元素直接赋值。如:
enum monthnames {January=1,February, march=31};
可以强制定义其他类型,如:
enum monthnames : byte{January ,February,March};

结构类型

结构类型也是一种值类型,使用它的目的是用于创建小型的对象,用以节省内存.下面的例子表示一个使用byte类型的4个字段的IP地址。
using System;
Struct IP //声明结构
{ public byte b1,b2,b3,b4;}
Class test
{public static void Main()
{
IP myIP;
myIP.b1=192;
myIP.b2=168;
myIP.b3=1;
myIP.b4=101;
Console.Write(“{0}.{1}.”, myIP.b1, myIP.b2);
Console.Write(“{0}.{1}”, myIP.b3, myIP.b4);
}
}

引用类型

引用类型包括类类型、接口类型、代表类型和数组类型。
1、类类型
类 类型定义了一种数据结构,这个数据结构中包含了数据成员(如常量、字段和事件等),函数成员(如方法、属性、索引、操作、构造函数和析构函数等)和嵌套类型。支持继承。
2、对象类型
对象类型是其他所有类型最终的基础类型。在C#中每一种类型都直接或者间接的源于object这个类类型。
3、字符串类型
字符串类型是直接从object中继承而来的密封类。String类型的值可以写成字符串文字的形式。

6、数组

数组是包含一串变量的数据结构。数组变量也称做数组元素,它们具有相同的类型,这种类型也称做数组元素类型。数组的元素类型可以是任何类型,包括数组类型。
数组用下标确定每一个数组元素的索引号。只有一个下标的数组称为一维数组,多于一个下标的数组称为多维数组。
例:int[] a={0,2,4,6,8}; 等价于int[] a=new int[] {0,2,4,6,8};
也可以这样初始化:a[0]=0; a[1]=2; a[2]=4; a[3]=6; a[4]=8;
int[] a; //int型的一维数组
int[,] a; //int型的二维数组
int[,,] a; //int型的三维数组
int[] []a; //int型的数组的数组
int[][][]a; //int型的数组的数组的数组
数组的每个维数的长度不是数组类型的一部分,维数的长度是在数组创建语句中指定的,而不是在数组类型中指定的,例如:
int[,,] a3=new int[10,20,30];
a3是是一个数组变量, int[,,] 没有指定数组的长度,数组创建语句new int[10,20,30]才指定。下面的例子创建一个数组的数组:
int[][] J=new int[3][];
J[0]=new int[] {1,2,3};
J[1]=new int[] {1,2,3,4,5,6};
J[2]=new int[] {1,2,3,4,5,6,7,8,9};

加框和消框

boxing和unboxing允许把任何值类型的值转化为对象(object)类型,或者把object类型转化为值类型,这样它就把值类型和引用类型紧密的结合起来了。
简单的说,加框操作就是数值类型转换为类型对象,消框操作就是类型对象转换为数值类型。
1、加框操作
给一个值加框指隐式地把任何数值类型转换成类型对象。当一个数值类型被加框时,一个对象实例就被分配,而且数值类型的值复制给新的对象。
如:int n=200;
object o=n; //加框操作
o=201;
Console .WriteLine(“{0}{1}”,n,o);
改变o值,n的值不变

2、消框是显式操作-必须告诉编译器,想从对象中抽取出哪一种值类型。当执行消框操作时,C#检测所请求的值类型是否存储在对象实例中。
如:
int n=200;
object o=n;
int u=(int) u; //消框转化


操作符

操作符格式说明示例
括号操作符格式 ()
点操作符格式 (E.I)其中E是基本表达式或者预定义类型,I是一个标识符。C++里除了“.”之外还有“::” “->”,C#里用点操作符来代替。
比如一个类T有成员变量M,在C++里用T::M来引用,C#里用T.M来引用。
另一点不同的是,C#里预定义类型也是从Object类派生出来的,因此也定义了成员变量,比如,I是一个short类型的变量,那么I.ToInt()操作将返回一个Int类型的值。
后缀加减操作符格式:p++;p--; ++p; --p;
结果是给变量p加1或减1
new操作符格式:a、 new 类型(参数列表)b、new 数组类型初始化列表
c、new 代表类型(表达式)
typeof操作符该操作返回一个类型对应的system.type,如:
typeof(int); typeof(System.Int32); typeof(string);
各自的结果为int32,int32,string。typeof只对类型操作,不能对变量操作,例如,“int I;typeof(I);”是不合法的
sizeof操作符该操作可获得一个类型所占用的空间大小,以字节为单位。该操作符用在unsafe模块中,如
Unsafe{
S=sizeof(int);
}
或者在调用该操作符的函数中使用该前缀。
单目操作符
(1)+-操作
(2)逻辑非:!(表达式)
(3)位非:~(表达式)
(4)强制类型转换: (T) 表达式
关系运算符
==、!=、< 、>、<= 、 >=、 is
is用来判断一个变量是否是某一类型,例如,s is string
位逻辑操作符
&(位与)、|(位或)、^(异或)
可以对整数、布尔、和枚
举类型进行这三种操作。
条件逻辑操作符
包括&&(与)和||(或)
条件运算符
b? x:yb为真,结果是x,否则是y

语句

分类格式说明示例
1、语句块{ 语句列表}
2、空语句
3、标签语句标识:语句标签语句可以通过goto语句来引用。标签不会和变量混淆int F(int x){
if (x>=0) goto x;
x=-x;
x: return x;
}
上面的代码中x既是一个标签也是一个变量,两者不会冲
突。
语句格式说明示例
ifif(布尔表达式)嵌入语句[else 嵌入语句]
switchswitch(表达式){
case 常量表达式:嵌入语句
[default: 嵌入语句]}
必须用break强迫退出switch语句,另外如果企图执行完case 0语句后,继续执行后面的语句则须使用goto语句。switch(i){
case 0:
casezero();
goto case1;
case1:
caseone();
goto default;
default:
caseothers();
break;
}
whilewhile(布尔表达式) 嵌入语句
do…whiledo 嵌入语句 while(布尔表达式)
forfor([初始化];[布尔表达式];[重复语句])嵌入
foreach
foreach(类型 标识 in 表达式)嵌入语句
foreach语句列举出聚集的元素,并为每一个聚集的元素执行一条嵌入语句。using System;
public class foreachapp
{ public static void Main()
{ int odd=0,even=0;
int[] arr=new int[] {0,1,2,5,7,8,11};
foreach (int i in arr)
{ if (i%2==0)
even++;
else
odd++;
}
}
}
breakbreak语句用于退出最近的包含它的switch、while、do、For或foreach语句。
continuecontinue语句开始重复执行新的最近的包含它的 whilewhile、do、For或foreach语句。
gotogoto语句用于将控制权传递给由标号表明的语句。
returnReturn语句将控制权返回给包含该return语句的函数成员 的调用程序。
try-catch捕获并处理异常的好处是不用把那些令人讨厌的异常信息提示给用户,而是使产生了异常的应用程序继续执行。
try包含可能会产生异常的语句,而catch语句处理一个异常。Throw通常用在异常处理语句中,当抛出异常时,程序在catch语句中搜索对该异常的处理代码。当抛出异常时,控制被传递给处理该异常的try语句中的第一个catch语句。
try-finally使用try和finally清除异常它不仅抑制了错误信息,而且所有包含在finally块中的代码在异常被引发后仍然会被执行。
try-catch-finally使用try-catch-finally处理所有异常合并了前面两种错误处理技术-捕获错误、清除并继续执行应用程序。
转自http://mxpopstar.blog.163.com/blog/static/73764120089201011401/

转载于:https://www.cnblogs.com/Garden-blog/archive/2011/03/17/1987115.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298567.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用wxpython做ui_wxPython - 如何强制UI刷新?

我把我的问题归结为这篇文章中显示的示例代码。请注意&#xff0c;我没有调用app.MainLoop&#xff08;&#xff09;&#xff0c;因为这不是一个交互式窗口;我希望它在开始时弹出&#xff0c;在工作发生时显示一些进度条&#xff0c;并在完成时消失。wxPython - 如何强制UI刷新…

设置计算机网络密码怎么设置路由器,如何在计算机上设置路由器密码?

问: 如何在计算机上设置路由器密码&#xff1f;A: 在计算机浏览器中&#xff0c;输入路由器的管理地址&#xff0c;打开登录页面&#xff0c;输入登录密码&#xff0c;然后进入设置页面.然后打开无线设置或Wi-Fi设置选项&#xff0c;您可以设置无线密码(wifi密码). 打开此选项可…

hive sql 怎么实现循环_不出办公室就能无水造纸?让废纸“秒循环再生”怎么实现的...

废纸变为再生纸&#xff0c;不出办公室就能循环利用起来&#xff0c;既节省大量木材&#xff0c;还不消耗一滴水……第三届进博会上&#xff0c;首次参展的打印巨头爱普生带来其全球首创的“干纤维纸张循环系统”&#xff0c;环保效果令人赞叹&#xff0c;吸引大批观众前来围观…

用ISAPI方式实现Web页面的自动更新

对于某些网站管理员来说&#xff0c;最痛苦的事情莫过于每天必做的重复工作。譬如&#xff1a;从新闻页面中删除旧的新闻标题&#xff0c;换上新的新闻标题&#xff1b;如果想让读者能看到以前的新闻&#xff0c;还要更改随时间改变的FormField值。等等。用DELPHI编写一个WebSe…

windows下编译firefox

可以自己定制下。估计很简单。。。。。 官方文档扫一遍&#xff1a; https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Build_Instructions 以下是中文相关博客&#xff1a; http://www.cnblogs.com/jianghust/archive/2010/06/14/1758234.html http://blog.…

两头编程,测试中间

最近在做一些开发测试代码的工作&#xff0c;就是为了测试中间业务程序&#xff0c;前头调用程序&#xff0c;后头写挡板程序&#xff0c;说白了就是链路调用&#xff0c;因为复杂度在中间的业务程序&#xff0c;所以前后两端的程序应相对简单。这里就有一个问题&#xff1a;技…

Win32 窗口篇(3)

1.11 如何显示或隐藏窗口的标题栏 使用ModifyStyle方法改变参数来更改窗体样式 void CDemoDlg::OnTest1() {//删除标题栏风格ModifyStyle(WS_CAPTION, 0, SWP_FRAMECHANGED); }void CDemoDlg::OnTest2() {//添加标题栏风格ModifyStyle(0, WS_CAPTION, SWP_FRAMECHANGED); …

linux 消息队列_Linux进程间通信第六讲 标准IPC之消息队列

来源CSDN:CSDN-专业IT技术社区-登录​blog.csdn.net一、概念和原理消息队列是另一种标准IPC,当然也大概遵循大部分标准消息队列,它是存放消息(数据)的队列&#xff0c;而队列是先进先出的线性数据结构换句话说,我们就是利用这个数据结构 进行进程间的通信消息队列允许多个进程同…

15个只有数学老师懂的泪流满面瞬间

全世界只有3.14 % 的人关注了爆炸吧知识「1」大题算了半天&#xff0c;就是跟标准答案对不上「2」一次令人期待的公开课啊啊——啊...「3」这就是传说中美好的协同教研「4」在网上下了一堆 PPT 准备拼到一起「5」预测高考题「6」临下课了还有三道大题没评讲「7」当我以为我已经…

matlab绘制二元一次函数图像_【八上数学】 一次函数必考知识点(下)

【八上数学】《一次函数》必考知识点(中)【八上数学】《函数、一次函数》必考知识点(上)写在前面本讲&#xff0c;我们重点研究一次函数与一元一次方程&#xff0c;不等式&#xff0c;二元一次方程组的问题&#xff0c;帮助同学们解决一些典型问题&#xff0e;一、一次函数与二…

计算机能代替纸笔英语作文,电脑能代替纸笔吗英语作文

电脑能代替纸笔吗英语作文在现实生活或工作学习中&#xff0c;说到作文&#xff0c;大家肯定都不陌生吧&#xff0c;作文可分为小学作文、中学作文、大学作文(论文)。作文的注意事项有许多&#xff0c;你确定会写吗&#xff1f;以下是小编为大家整理的电脑能代替纸笔吗英语作文…

《WinForm开发系列之高级篇》Item2 TCP异步传输

1.AsySocket.cs 代码 publicclassAsySocket {#region私有字段privateSocket mSocket null;privatestringmID "";#endregion#region构造函数publicAsySocket(string_LocalIP, int_LocalPort) { try{ mSocket newSocket(AddressFamily.InterNetwork, SocketType.Stream…

C# params的用法详解

为了将方法声明为可以接受可变数量参数的方法&#xff0c;我们可以使用params关键字来声明数组,要求&#xff1a;(1)在方法声明中的 params 关键字之后不允许任何其他参数&#xff0c;并且在方法声明中只允许一个 params 关键字。(2)该参数必须标识一个一维数组&#xff0c;但类…

忙碌的三月,小感慨下~

感觉这个月过的非常快&#xff0c;收获好多。 这个月一直在忙科技立项的事&#xff0c;忙着学习VSTO&#xff0c;忙着分配任务&#xff0c;忙着答辩。我个人还是很喜欢去接触新的东西的&#xff0c;各种学习&#xff0c;呵呵。在这次科技立项中学到了更多的是管理方面的东西&am…

spring 单例 获取多例的位_Spring系列第6篇:玩转bean scope,避免跳坑里!

公众号关注“程序员二哥”&#xff0c;设为‘星标’&#xff0c;带你学习更多的知识。本文内容 详细介绍5中bean的sope及使用注意点自定义作用域的实现应用中&#xff0c;有时候我们需要一个对象在整个应用中只有一个&#xff0c;有些对象希望每次使用的时候都重新创建一个&…

女生的拳头有多厉害?

1 天下武功唯快不破2 狗子&#xff1a;没想到我有这种天赋3 哈哈哈还是你社会啊4 女生的拳头有多厉害&#xff1f;?5 怎么解开的&#xff1f;6 心中有海&#xff0c;脚下有沙&#xff0c;这就是马尔代夫7 你的人生概括

【转】10个让人受益的管理原理

1、彼得原理    每个组织都是由各种不同的职位、等级或阶层的排列所组成&#xff0c;每个人都隶属于其中的某个等级。彼得原理是美国学者劳伦斯彼得在对组织中人员晋升的相关现 象研究后&#xff0c;得出一个结论&#xff1a;在各种组织中,雇员总是趋向于晋升到其不称职的地…

与ln的指数转化公式_高考数学48条秒杀型公式与方法

点上方蓝字&#xff0c;关注“云学冠学习资讯”有助于提高成绩哦&#xff01;除了课本上的常规公式之外&#xff0c;掌握一些必备的秒杀型公式能够帮你在考试的时候节省大量的时间&#xff0c;师姐这次的分享就是48条秒杀公式&#xff0c;直接往下看&#xff01;1.适用条件&…

计算机技术级生活中的应用,人工智能技术在计算机中的发展与应用

摘要&#xff1a;科学技术的快速提高给计算机技术应用带来了新的发展.计算机程序研发人员在开发计算机应用领域这一过程之中,会依据使用人员的使用要求来进行规划和整合.随着人们对计算机网络依赖程度逐渐提高,人们对计算机的运用要求变得十分的严格和严谨,从而使计算机开发设计…

Dotnet 6.0,你值得拥有

Dotnet 6.0 就要来了&#xff0c;这会是一个绝对值得拥有的版本。了解一下&#xff1f;最近在研究 Dotnet 6.0 & C# 10&#xff0c;一个字 - 爽&#xff01;下面&#xff0c;分享一下新的一些特性给大家。一、编程语言方面编程语言升到 C# 10&#xff0c;新东西不少。1. 属…