问题一: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();
        }
    }
}各位高手麻烦花点时间过来帮我看看,呵呵,谢谢你们了!

解决方案 »

  1.   

    第一个问题问得还有点水平,第二个问题也太弱了吧?问题一:       struct myStruct 
            { 
                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;快结贴吧
      

  2.   

    MethodInfo没有这个类的时候,你打前几个字母是不会出来的,添加命名空间