C# 类型,变量与对象

类型


是数据在内存中存储时的型号

! 编程语言中的数据类型与数学中的数据类型不完全相同

e.g

编程语言中 3/4 结果为0。

强类型语言与若类型语言比较


当用X语言编程时,程序中的数据受数据类型的约束很严格 则它为强类型语言 ,反之则为弱类型语言

以C#举例

e.g 1

int x;
x=100;
long y;
y=100L;
//x=100L;    这句报了红线  因为不能将一个长整型数据放到整形变量中

e.g 2

int x=100;
if(x==200)
{Console.WriteLine("OK");}
/* 错
if(x=200) 括号中需要传入bool类型 而此处是赋值
{Console.WriteLine("OK");}*/

e.g 3 C++

int x=100;

if(x=200)//编译也可以通过  因为C++中没有bool类型 它是将其与整数小数混用 只要括号里!0 都为真 

{printf("OK\n");}

强类型|弱类型(灵活)|

—|—|

C#|JavaScript|

C#中引入dynamic类型解决灵活性问题

类型在C#中的作用


  • 存储此类型的变量所需的内存空间大小

​ int 占4个字节 32位比特位 ;

​ long 占8位 64比特位 ;

  • 此类型的值可表示的最大、最小值的范围

Type|Range|Size

—|—|—|

sbyte|-128 to 127|Signed 8-bit integer

byte|0 to 255|Unsigned 8-bit integer

char|U+0000 to U+ffff|Unicode 16-bit integer

short|-32,768 to 32,767|Signed 16-bit integer

ushort|0 to 65,535|Unsigned 16-bit integer

int|-2147,483,648 to 2147,483,647|Signed 32-bit integer

uint|…|…

long|…|…

ulong|…|…

  • 此类型所包含的成员(方法、属性、事件)

    • 静态 编辑器 编译器

    • 动态 反射

      Type myType = typeof(Form);
      
      PropertyInfo[] pInfos = myType.GetProperties();
      MethodInfo[] mInfos =myType.GetMethod(); 
      foreach(var p in pInfos)
      {Console.WriteLine(p.Name);
      }
      
  • 此类型由何基类派生而来(继承关系)

    Console.WriteLine(myType.BaseType.BaseType.FullName);
    
  • 程序在运行的时候,此类型的变量分配在内存的何处

    • Stack介绍 栈 方法调用 1-2m
    • Stack Overflow
    //栈爆  只递不归
    e.g 1
    class Program
    {Static void Main(String [] args){
        BudGuy bg=new BudGuy();
        bg.BadMethod();
    }
     }
    class BadGuy{
        public void BadMethod()
        {int x=100;
        this.BadMethod();}
    }
    e.g 2
    class Program
    {
        Static void Main(String [] args)
        {
    unsafe{int *p=stackalloc int[9999999];}
    	}
    } 
    
    • Heap 堆 存储对象 较大 几个G

    • 使用Performance Monitor 查看进程的堆内存使用量

      ​ Win+R perfmon=>Performance Monitor “X”=>“+”=>Process,Private Bytes ,Example,

    • 关于内存泄漏 忘记回收

  • 此类型所允许的操作(运算)

double result	=3.0/4.0;
Console.WriteLine(result); //输出0.75
double result	=3/4;
Console.WriteLine(result); //输出0

C#语言的类型系统

  • C#的五大数据类型

类(Classes):Window,Form,Console,String

结构体 (Structures):Int32,Int64,Single,Double

枚举(Enumerations): HorizontalAlignment,Visibility

接口 (Interfaces):

委托 (Delegates):

变量对象与内存

变量名对应着变量的值在内存中的存储位置

表面 变量的用途是存储数据

实质 变量表示了存储位置,并且每个变量都有一个类型,以决定什么样的值可以存入变量

  • 变量一共有7种
    • 静态变量、实例变量(成员变量、字段),数组元素、值参数、引用参数、输出形参、局部变量
  • 狭义说的变量指的是局部变量
    • 局部变量就是方法体里声明的变量
  • 变量的声明
    • 有效的修饰符组合 类型 变量名 初始化器

Tips: 变量=以变量名对应的内存地址为起点、以其数据类型所要求的存储空间为长度的一块内存区域

  • 值类型变量

    • 以byte/sbyte/short/ushort为例
    • 值类型没有实例,所谓的“实例”与变量合而为一
  • 引用类型的变量与实例

    • 引用类型的变量与实例的关系:引用类型变量里存储的是数据的对象的内存地址
    class Program{
        static void Main(String[] args){
            Student stu;//内存分配四个字节  每个比特位都是0
            stu=new Student();//堆内存里真正的创建实例6个字节,stu引用实例(堆内存地址保存在变量stu)
            //存储对实例的引用
        }
    }
    class Student{
        uint ID;//4字节
        ushort Score;//2字节
    }
    

    //Excel表格演示

  • 局部变量是在Stack - 栈上面分配内存

  • 变量的默认值 成员变量有 默认0

  • 常量(值不可以改变的变量,不可以被再次赋值 声明时带初始化器)

  • **装箱和拆箱 **

    class Program{
        static void Main(String[] args){
     		int x =	100;
            object obj= x;//装箱
        	int y=(int)obj;//拆箱
            Console.WriteLine();
        }
    }
    }
    

    装拆箱会损失性能

以上是 C#的复习笔记 参考 Timothy Liu的C#课程

你可能感兴趣的:(道长的C#学习笔记,c#,开发语言)