C#基础数据类型

本文详细介绍了C#中的基础数据类型,包括值类型如bool、byte、char、enum、sbyte及数字类型,以及引用类型如class、interface、delegate、object、string。讨论了值类型的数据大小,如bool占1字节,int占4字节,以及String类型的特性。此外,还阐述了可空数据类型的概念及其使用,如Nullable<T>类型,以及如何通过?简化声明和??运算符处理空值情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在C#中,以下数据类型为值类型:
 bool、byte、char、enum、sbyte以及数字类型(包括可空类型)
以下数据类型为引用类型:
 class、interface、delegate、object、stirng

值类型数据大小(值类型都继承自ValueType类):

bool -> System.Boolean (布尔型,其值为 true 或者 false)
byte -> System.Byte      (字节型,占 1 字节,表示 8 位正整数,范围 0 ~ 255)
sbyte-> System.SByte  (带符号字节型,占 1 字节,表示 8 位整数,范围 -128 ~ 127)
char -> System.Char      (字符型,占有两个字节,表示 1 个 Unicode 字符)
short -> System.Int16    (短整型,占 2 字节,表示 16 位整数,范围 -32,768 ~ 32,767)
ushort -> System.UInt16(无符号短整型,占 2 字节,表示 16 位正整数,范围 0 ~ 65,535)
uint -> System.UInt32    (无符号整型,占 4 字节,表示 32 位正整数,范围 0 ~ 4,294,967,295)
int -> System.Int32        (整型,占 4 字节,表示 32 位整数,范围 -2,147,483,648 到 2,147,483,647)
float -> System.Single    (单精度浮点型,占 4 个字节)
ulong -> System.UInt64  (无符号长整型,占 8 字节,表示 64 位正整数,范围 0 ~ 大约 10 的 20 次方)
long -> System.Int64      (占8字节,表示 64 位整数,范围大约 -(10 的 19) 次方 到 10 的 19 次方)
double -> System.Double(双精度浮点型,占8 个字节) 

enum和struct也是值类型。

数据类型结尾词

1.Decimal类型的变量在结尾要加M

decimal abc = 1.3m;

2.无符号类型用u,长整形用l

String类型

1.String是字符串类,string是基本类型,C#中最终二者都会映射成字符串类,String和string等同。

2.如果在字符串前面加上@则字符串就不会被转义

3.@“\abc” 这样就不会发出警报音,而是原生态的"/abc"

4.string的恒定性:
在.Net中,string类型的对象一旦创建即不可修改!包括ToUpper、SubString、Trim等操作都会在内存中产生新的字符串。。
字符串驻留机制,同一个字符串对象可以在不同的应用程序域中被访问,所以驻留的字符串是进程级的,垃圾回收不能释放这些字符串对象,只有进程结束这些对象才被释放。下面的情况,有变量参与运算,使用的是Concat函数,b 和 c引用的不再是同一个对象。
 string a = "a"; //值类型的字符串都放在
进程的字符串驻留池中。
 string c = "a"+"b";
 string d = "ab";
 string e = a + "b"; //变量和字符串之间运算调用string.Concat方法,产生在托管堆上。
 Console.WriteLine(ReferenceEquals(c, d)); //true
 Console.WriteLine(ReferenceEquals(c, e)); //false
 Console.WriteLine(c == e); //object.Equals(c, e) true   == 比较两个字符串的值,不比较引用。若比较两个对象(包括字符串对象)则会比较引用。

5.“string = ”与“new stirng()”的区别
 string test = "a";
 string test = new string('a', 1);
以上两行代码的效果是一样的,它们的区别在于加载”a”的时间不同:第一行的“a”是一个常量,在编译期就已经被放在一个叫做常量池的地方了,常量池通常装载一些在编译期被确定下来的数据,例如类、接口等等;而第二行是运行时CLR在堆中生成的值为“a”的字符串对象,所以后者没有字符串驻留。

6.StringBuilder是System.Text命名空间

可空数据类型

在平时编程时(特别是与数据库交互时),我们经常会遇到需要表达一个变量为空的的情况。C#引入了Nullable<T>类型来解决值类型的NULL问题。
声明可空类型Nullable<T>本身是一个泛型类型,表示是类型T的可空版本。Nullable有两个属性,HasValue与Value。前者为bool值,表示是否有值,后者为T类型,保存值本身。

Nullable<int> a=10,b=null;
Console.WriteLine("{0},{1}",a,b);   //输出 "10," 可以看出b为空
Console.WriteLine("{0},{1}",a.HasValue,a.Value);    //输出"10,True"


注意,Nullable<T>是值类型。可空类型有足够多的优化让我们可以像使用一个值类型来使用它们,除了它们可以为null。
T和Nullable<T>有相互的隐式转换。但是要注意,当Nullable<T>转换为T,如果值为空,那么会抛出异常。

用?代替Nullable
声明可空类型时,总是要写一遍Nullable,无疑非常笨重。语法糖形式简化如下
int? a=10,b=null;
Console.WriteLine("{0},{1}",a,b);
int?这种写法和Nullable<int>完全等价。

??操作符代替判null
其基本作用是判断左边的值是否为空,如果空,则返回右边的值,否则返回左边的值。
    int? test;
    ...
    int result;
    result = test ?? 100 ;
值得注意的是,即便是引用类型也可以使用??运算符。
此外,??可以连续使用。譬如多个可空变量形成如first??second??third的表达式。此时这个表达式会从左到右求值直到遇到第一个有值的变量并返回

《完》。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值