zoukankan      html  css  js  c++  java
  • .NET : 如何查看值类型的大小

    using System;
    using System.Text;
    
    using System.Runtime.InteropServices;
    
    
    namespace DataTypeSample
    {
        class Program
        {
            static void Main(string[] args)
            {
                //打印标准数据值类型的大小 sizeof
                Console.WriteLine("标准值类型:");
    
                Console.WriteLine("Int16:{0}", sizeof(Int16));
                Console.WriteLine("Int32:{0}", sizeof(Int32));
                Console.WriteLine("Int64:{0}", sizeof(Int64));
                Console.WriteLine("Boolean:{0}", sizeof(bool));
                Console.WriteLine("Char:{0}", sizeof(char));
                Console.WriteLine("Byte:{0}", sizeof(byte));
    
    
                Console.WriteLine("结构体和枚举");
                //打印struce和enum的大小
                Console.WriteLine("SimpleStruct:{0}", Marshal.SizeOf(typeof(SimpleStruct)));
                Console.WriteLine("StruceWithRefType:{0}", Marshal.SizeOf(typeof(StructWithRefType)));
                Console.WriteLine("City:{0}", sizeof(City));
                Console.WriteLine("SmallCity:{0}", sizeof(SmallCity));
    
    
                //打印引用类型的大小
                //引用类型的大小是不固定的,初识大小是内部成员的长度之和
                Console.WriteLine("理解引用类型中值类型成员的原理");
                Customer c1 = new Customer() { Id = 1 };
                Customer c2 = c1;
                c2.Id = 2;
    
                Console.WriteLine("C1:{0},C2:{1}", c1.Id, c2.Id);
    
                Console.WriteLine("理解String类型的长度");
                string info = "你好,陈希章";
                Console.WriteLine(info.Length);//非unicode
                Console.WriteLine(Encoding.ASCII.GetBytes(info).Length);
                Console.WriteLine(Encoding.Unicode.GetBytes(info).Length);
    
                Console.Read();
    
    
            }
        }
    
    
    
    
    
    
        [StructLayout(LayoutKind.Sequential)]
        struct SimpleStruct
        {
            public int ID { get; set; }
            public byte MyProperty { get; set; }//在结构体中,即便是值类型,最少也是4字节
    
            public short money { get; set; }
            public short other { get; set; }
    
            //也就是说,即便全部是值类型,但其实每次分配空间的时候都是4字节(如果32位的话)的倍数
        }
    
        /// <summary>
        /// 这是一个包含了值类型和引用类型成员的结构
        /// </summary>
        [StructLayout(LayoutKind.Sequential)]
        struct StructWithRefType {
            public int Id { get; set; }//值类型,直接就是该类型的大小,4Byte
            
    
            public string Name { get; set; }//引用类型,在结构中用一个INT32的字节表示,其实就是4个字节。(这个跟当前操作系统是32位还是64位有关
            public string Address { get; set; }//引用类型,在结构中用一个INT32的字节表示,其实就是4个字节。(这个跟当前操作系统是32位还是64位有关
            
        }
        
    
        enum City { 
            Beijing,
            Shanghai,
            Nanjing
        }
        enum SmallCity :byte
        { 
            Beijing,
            Shanghai,
            Hangzhou
        }
    
       
        class Customer
        {
            public int Id { get; set; }//四个字节,而且这个INT的值是方法在堆上面的
    
            private string name = string.Empty;
            public string Name { 
                get { return name; } 
                set { name = value; } 
            }
        }
    }
    
    image 
  • 相关阅读:
    设计模式之实现状态模式
    一定要记住的OO设计原则:
    设计模式之实现命令模式
    设计模式之实现迭代器模式
    设计模式之实现观察者模式
    设计模式之实现策略模式
    设计模式之实现组合模式
    设计模式之实现几种工厂模式
    设计模式之实现装饰者模式
    pygame学习笔记(3)——时间、事件、文字
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/1620564.html
Copyright © 2011-2022 走看看