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));




        }
    }
}

 

posted on 2020-04-23 17:11  obge  阅读(426)  评论(0编辑  收藏  举报