问题一:int 4个字节,double 8个字节,char2个字节,decimal16个字节,一共有30个字节。但是myStruct显示40个字节,还有10个字节从哪里来的呢?
namespace EX17
{
class Program
{
struct myStruct
{
int i;
double d;
char c;
decimal de;
} static void Main(string[] args)
{
Console.WriteLine("Sizeof(int) is {0}", sizeof(int));
Console.WriteLine("Sizeof(double) is {0}", sizeof(double));
Console.WriteLine("Sizeof(c) is {0}", sizeof(char));
Console.WriteLine("Sizeof(decimal) is {0}", sizeof(decimal));
unsafe
{
Console.WriteLine("Sizeof(myStruct) is {0}", sizeof(myStruct));
}
/* Console.ReadLine();*/
Console.ReadKey();
}
}
}
问题二:typeof操作符,返回某个对象的类型,并且这个值是System.Type类型的变量。以下程序想列出int类型所有可用的方法信息,可是出现三个错误:
D:\My Documents\Visual Studio 2005\Projects\EX16\EX16\Program.cs(12,13): 错误 CS0246: 找不到类型或命名空间名称“MethodInfo”(是否缺少 using 指令或程序集引用?)
D:\My Documents\Visual Studio 2005\Projects\EX16\EX16\Program.cs(12,36): 错误 CS0029: 无法将类型“System.Reflection.MethodInfo[]”隐式转换为“MethodInfo[]”
D:\My Documents\Visual Studio 2005\Projects\EX16\EX16\Program.cs(13,22): 错误 CS0246: 找不到类型或命名空间名称“MethodInfo”(是否缺少 using 指令或程序集引用?)
代码如下:
using System;
using System.Collections.Generic;
using System.Text;namespace EX16
{
class Program
{
static void Main(string[] args)
{
Type t = typeof(int);
MethodInfo[] methods = t.GetMethods();
foreach (MethodInfo m in methods)
Console.WriteLine(m.ToString());
Console.ReadKey();
}
}
}各位高手麻烦花点时间过来帮我看看,呵呵,谢谢你们了!
namespace EX17
{
class Program
{
struct myStruct
{
int i;
double d;
char c;
decimal de;
} static void Main(string[] args)
{
Console.WriteLine("Sizeof(int) is {0}", sizeof(int));
Console.WriteLine("Sizeof(double) is {0}", sizeof(double));
Console.WriteLine("Sizeof(c) is {0}", sizeof(char));
Console.WriteLine("Sizeof(decimal) is {0}", sizeof(decimal));
unsafe
{
Console.WriteLine("Sizeof(myStruct) is {0}", sizeof(myStruct));
}
/* Console.ReadLine();*/
Console.ReadKey();
}
}
}
问题二:typeof操作符,返回某个对象的类型,并且这个值是System.Type类型的变量。以下程序想列出int类型所有可用的方法信息,可是出现三个错误:
D:\My Documents\Visual Studio 2005\Projects\EX16\EX16\Program.cs(12,13): 错误 CS0246: 找不到类型或命名空间名称“MethodInfo”(是否缺少 using 指令或程序集引用?)
D:\My Documents\Visual Studio 2005\Projects\EX16\EX16\Program.cs(12,36): 错误 CS0029: 无法将类型“System.Reflection.MethodInfo[]”隐式转换为“MethodInfo[]”
D:\My Documents\Visual Studio 2005\Projects\EX16\EX16\Program.cs(13,22): 错误 CS0246: 找不到类型或命名空间名称“MethodInfo”(是否缺少 using 指令或程序集引用?)
代码如下:
using System;
using System.Collections.Generic;
using System.Text;namespace EX16
{
class Program
{
static void Main(string[] args)
{
Type t = typeof(int);
MethodInfo[] methods = t.GetMethods();
foreach (MethodInfo m in methods)
Console.WriteLine(m.ToString());
Console.ReadKey();
}
}
}各位高手麻烦花点时间过来帮我看看,呵呵,谢谢你们了!
{
int i;
double d;
char c;
decimal de;
}
这里有个对齐的概念,会用其成员中占空间最大的成员的大小对齐
int 4
double 8
char 1
decimal 16
由于decimal内部是由4个int构成的,所以最大的成员是double,按8字节对齐
i 占4个字节,d占8个字节,加起来超过8了,所以i就会占8个字节(对齐大小),类似,c也是
所以:8+8+8+16=50交换一下位置:
struct myStruct
{
int i;
char c;
double d;
decimal de;
}
i和c加起来不超过8字节,所以会在一个对齐长度之内,而i+c+d超过了,所以d在另一个对齐长度
其中i占4个字节,c会占据剩下的对齐空间
所以:
4+4+8+16=32问题二:
弱得我都不好意思回答了.....
引入命名空间:
using System.Relfection;快结贴吧