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 
  • 相关阅读:
    【Canvas】(1)---概述+简单示例
    【jQuery】(8)---jquery Ajax
    lastlogon
    windows server core 2016 IIS远程管理的那些坑
    开机手机显示存储空间不足某些系统功能可能无法正常使用,而且无法取消这个界面,导致手机停在这个界面无法操作。
    javascript prototype理解
    微信小程序诡异错误this.setData报错
    转:goproxy和go modules的初步使用
    真机调试No target device的解决(android studio)3.4.1
    unable to access android sdk add-on list的解决
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/1620564.html
Copyright © 2011-2022 走看看