1.typeof

请看代码:

简单介绍操作符typeof和sizeofusing System;
简单介绍操作符typeof和sizeof
using System.Reflection;
简单介绍操作符typeof和sizeof
简单介绍操作符typeof和sizeof
class Person
}

typeof一般用在反射里,这里例子使用反射分别获得一个自定义类型的名字,方法和所有成员。比较简单,就不多解释了。

2.sizeof

简单介绍操作符typeof和sizeofusing System;
简单介绍操作符typeof和sizeof
简单介绍操作符typeof和sizeof
class SomeClass
}

要使用sizeof操作符,就必须把代码标记为unsafe,编译的时候,开启unsafe开关。

程序结果为:

一些基本类型的大小
sizeof short = 2
sizeof int = 4
sizeof long = 8
sizeof bool = 1

那么我们想要测试自己定义的值类型(比如说结构)呢?

请看如下代码:

简单介绍操作符typeof和sizeofusing System;
简单介绍操作符typeof和sizeof
简单介绍操作符typeof和sizeof
struct StructWithNoMembers
}

如果不编译,你会认为输出什么?你大概会认为,第一个结构没有成员,那就是0,第二个结构是15(你可以看上一个例子里输出的数值),第三个结构是0+15=15。

很可惜,你错了。

输出结果为:

sizeof StructWithNoMembers structure = 1
sizeof StructWithMembers structure = 16
sizeof CompositeStruct structure = 20

为什么会这样呢?这是由填充和结构对齐造成的,这与编译器在输出文件的映像中如何布置结构有关。例如,如果一个结构有3个字节长,而字节对齐会被设置成4字节,那么编译器自动填充一个额外的字节,sizeof报告这个结构有4字节。

/* 说明:原书《Inside C# 2rd》在说明的时候有误,因为它的例子里是这样的:

struct CompositeStruct
{
 StructWithNoMembers a;
 StructWithMembers b;
 StructWithNoMembers c;
}

而在后面的说明中却以

struct CompositeStruct
{
 StructWithNoMembers a;
 StructWithMembers b;
}

说明的。而输出结果却又是

struct CompositeStruct
{
 StructWithNoMembers a;
 StructWithMembers b;
 StructWithNoMembers c;
}

的结果。不过没有大碍,大家看书的时候注意一下吧。

 

此文参考:《C#  技术解密》

 

 

相关文章:

  • 2021-08-29
  • 2021-09-18
  • 2021-11-07
  • 2021-12-06
  • 2021-06-22
  • 2018-01-31
  • 2022-12-23
猜你喜欢
  • 2021-07-04
  • 2021-09-19
  • 2022-03-05
  • 2022-01-07
  • 2021-09-13
  • 2021-11-30
相关资源
相似解决方案