zoukankan      html  css  js  c++  java
  • C# ----- C# 数据类型

    在C# 中,变量主要分为三种类型:值类型,引用类型,指针类型

             java 中据我了解有两种  基本类型和引用类型

    主要就是注意,声明变量的时候是否创建一个存储空间

    值类型(Value types)

        定以:从类 System.ValueType 中派生的,

                 值类型变量可以直接分配给一个值,直接包含数据(如 int、char、float,它们分别存储数字、字符、浮点数)

         特点:当声明一个值类型时,系统分配内存来存储值

    C# 中可用的值类型:   Java中有 8 大基本类型,C#中都含有,就是 bool 与 boolean 书写不同,主要分为整数、小数(浮点)、字符、布尔

     

     注意:C# 语言中默认的整型是 int 类型、默认的浮点型是 double 类型

     如何得到一个类型或变量在特定平台的尺寸,使用 sizeof(type)   方法,以字节为单位。

    引用类型(Reference types)

    定义:不包含存储在变量中的实际数据,但它们包含对变量的引用。

    特点:一个内存位置。使用多个变量时,引用类型可以指向一个内存位置,如果内存位置的数据是由一个变量改变的,其他变量会自动反映这种值的变化。

    内置的 引用类型有:object、dynamic 和 string

    对象(Object) 类型(System.Object 类的别名)  : C# 通用类型系统(Common Type System) 中所有数据类型的终极基类,也就是源头爸爸。

          对象(Object) 类型可以分配任何其他类型 { 值类型,引用类型 [ 预定义类型(系统中内置的)、用户自定义类型(用户自定义引用类型有:class、interface 或 delegate)] } 的值,分配值 之前要进行类型转换。

    装箱与拆箱:主要就是将值类型转换为对象类型。(java 中 1.5 后可以自动拆装箱了,在Java中内置了八大基本类型对应的包装类。

     

     动态(Dynamic)类型

     可以存储任何类型的值在动态数据类型变量中,这些变量的类型检查是在运行时发生的。

     与对象类型对比: 对象类型变量在编译

    动态类型与对象类型相似,但是对象类型变量的类型检查是在编译时发生的,而动态类型变量的类型检查是在运行时发生的。

    字符串(String) 类型

    String 类型(System.String 类的别名):允许给其分配任何字符串值。从对象类型(Object)派生而来。

    字符串(String ) 类型的值可以通过两种方式进行分配:双引号("obge") 和 @双引号( @"obge")

     

    注意:

    1、string是c#中的类,String是.net Framework的类(在c# IDE中不会显示蓝色) 

    2、c# string映射为.net Framework的String ,使用C#时建议使用string 比较规范

     字符串和值类型的转换,主要就是借助  Parse() 和 Convert.To数据类型(变量名) 

     Convert 方法是数据类型转换中最灵活的方法,它能够将任意数据类型的值转换成任意数据类型,前提是不要超出指定数据类型的范围。
    
     Parse 方法用于将字符串类型转换成任意类型

    指针类型(Pointer types)

    指针类型变量存储另一种类型的内存地址 

    指针:一个变量,其值为另一个变量的地址的变量,即,内存位置的直接地址。就像其他变量或常量,您必须在使用指针存储其他变量地址之前声明指针。

    声明语法:  注意  * 

    变量类型 * 指针变量名;

     赋值:   注意  &

    指针变量名 = &其他类型变量名;
    // 表示在指针变量名中存储 其他变量的内存地址

    计算机中有个存储数据的叫储存器(分为 ram 和 rom), 首先是储存在 内存中(也就是ram 随机存储器,与cpu 直接交互的,其内部有好多的元器件进行存储,这个元器件就有两种状态0或1也就是有电,没电(多好要么有要么没),虽然一个元器件只有两种状态,但是多个组合就很大了,突然一组合就有了 Bit,Byte,KB,MB,GB,TB,PB,EB 的概念了 那么元器件也就有了另一个名字 比特(bit)或位,),在内存中的数据有不同的类型,而不同类型数据占用的字节数不一样,如 int 占4个字节,byte 占1 个字节,为了正确访问这些存储的数据,必须给每个字节都编上号码,每个编号都是惟一的,根据编号就能准确找到某个字节,而在内存中字节的编号又被称为地址(Address)或指针(Pointer)。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace obge
    {
        class Program
        {
            static void Main(string[] args)
            {
    
    
                //装箱:将值类型转换为引用类型的过程
                int int1 = 100;
                object obj1 = int1;
                Console.WriteLine("对象的值 = {0}", obj1);
                //拆箱:将值类型转换为引用类型,再由引用类型转换为值类型的过程
                int int2 = 100;
                object obj2 = int2;
                // 引用类型转换为 值类型需要强转
                int num = (int)obj2;
                Console.WriteLine("num:"+ num);
    
                //声明动态类型语法 :  dynamic 变量名 =  值;
                dynamic zheng = 1;
                dynamic xiao = 1.22;
                dynamic ziFu = 'o';
                dynamic chuan = "obge是";
    
                String str = "test";
                string sXiao = "oo";
    
                //1、C# string 字符串的前面可以加 @(称作"逐字字符串")将转义字符()当作普通字符对待
                string st1 = @"C:Windows";
                //等价于
                string str11 = "C:\Windows";
                //2、@ 字符串中可以任意换行,换行符及缩进空格都计算在字符串长度之内。
                string st2 = @"<script type=""text/javascript"">
                                     <!--
                                     -->
                                </script>";
    
                //由于会一闪而过,所以在加一个输入
                Console.ReadLine();
    
                Console.WriteLine(sizeof(int));
                //也可以写成
                Console.WriteLine("Size of int: ", sizeof(int));
                Console.WriteLine("Size of int1: " + sizeof(int));
                Console.WriteLine("Size of int2: {0}", sizeof(int));
    
    
    
    
            }
        }
    }
  • 相关阅读:
    linux内存的使用与page buffer (转)
    基于linux2.6.38.8内核的SDIO/wifi驱动分析(转)
    RamDisk块设备驱动实例开发讲解一
    Linux加密框架设计与实现(转)
    v4l2子系统学习心得
    一句memset引发的疑案
    linux 信号量之SIGNAL 0(转)
    可重入函数
    从ARM VIVT看linux的cache 处理
    内核抢占与preempt_count
  • 原文地址:https://www.cnblogs.com/obge/p/12746381.html
Copyright © 2011-2022 走看看