zoukankan      html  css  js  c++  java
  • 第二章:深入C#数据类型

    封装:

    官方定义

    封装又称信息隐藏,是指利用抽象数据类型(自定义类UserInfo)将数据和数据的操作结合在一起,使其构成一个不可分割的独立实体,尽可能的隐藏内部的细节,只保留一些对外接口,使之于外部发生联系。

    两种体现:

    1.把方法和属性封装到类中

    2.将私有字段封装成共有属性

    封装的优点:

    第一:代码重用

    第二:不必关心具体的实现(方法)

    第三:面向对象三大特征之一

    第四,具有安全性!

    数组:

    int [] num={1,2}

    num:当中保存的是内存中的地址如:0X001

    nums[0]:访问的是堆中的内容

    下面是一幅引用类型的内存原理图供参考(下面图片会引发部分人不适,请在家长陪同下观看,说白了就是画的丑):

    再献上一副数组赋值原理图(只是将栈上的内容赋值一份)

    结构体:

    01.结构体不用new,就可以直接对其属性赋值

    02.结构体中可以有字段,属性和方法

    03.结构体是值类型,类是引用类型

    04.在结构体中不能给字段赋初值,但是类中可以.

    05.结构体中没有默认构造函数,但类中有默认构造函数

    1.如果被struct修饰,那么他就是结构体

    2.结构体是一种数据类型,并且他是值类型(枚举也是值类型)

    3.有两种特殊的值类型:枚举和结构体

    4.当类中属性个数比较少的时候,定义成结构体

    public struct Dog
    {
        
    }

    给大家分析一下引用类型和值类型:

    引用类型:栈和堆都开空间

    1.string

    2.数组

    3.接口

    4.用户自定义类

    值类型:只在栈开空间

    1.int

    2.double

    3.boolean

    4.结构体

    5.枚举

    所有数据类型的父亲都是Object

    所有的值类型直接的父亲是ValueType,爷爷是Object

    构造函数:

    默认如果定义了一个类,系统会自动的生成一个和该类名称相同,并且没有返回值类型,甚至连Void都没有的方法,该方法就称为构造函数!

    1.方法没有返回值,连void都没有

    2.方法名和类名相同

    构造作用:初始化变量用的

    public class Dog
        {
            public string Name { get; set; }
            public int Age { get; set; }
    
            public Dog(string name, int age)
            {
                this.Name = name;
                this.Age = age;
            }
        }
    class Program
        {
            static void Main(string[] args)
            {
                Cat cat;
                cat.name="小白";
                cat.Say();
                Console.ReadLine();
    
                Dog dog = new Dog("大黄", 15);
            }
        }

    装箱和拆箱:

    箱子是引用类型,将值类型值装进引用类型变量里就称为装箱

    装箱:将值类型(栈)转换成引用类型(栈堆)

    拆箱:从引用类型(栈堆)转换成值类型(栈)

    什么时候应该装箱,什么时候应该拆箱?

    解析:由于装箱和拆箱过程都要损耗系统的性能,所以在开发中应该尽量避免装箱和拆箱。

    面试题:

    int number=3;   值类型的直接父类:ValueType,ValueType的父亲是Object
    Console.WriteLine(number.ToString());

    结论:没有装箱

    7.值类型传递和引用类型传递:

    值传递和引用传递的区别:有没有ref关键字,有ref是引用传递

     1 class Program
     2     {
     3         static void Main(string[] args)
     4         {
     5             //Cat cat;
     6             //cat.name="小白";
     7             //cat.Say();
     8             //Console.ReadLine();
     9 
    10             //Dog dog = new Dog("大黄", 15);
    11 
    12 
    13             int num1 = 1;
    14             int num2 = 2;
    15             Console.WriteLine("num1="+num1+",num2="+num2);
    16 
    17             //方法调用
    18             Change(ref num1, ref num2);
    19             
    20             Console.WriteLine("num1=" + num1 + ",num2=" + num2);
    21             Console.ReadLine();
    22 
    23         }
    24 
    25         //方法定义
    26         private static void Change(ref int num1, ref int num2)
    27         {
    28             int temp = num1;
    29             num1 = num2;
    30             num2 = temp;
    31         }
    32     }

    收工!

  • 相关阅读:
    终结篇:MyBatis原理深入解析(二)
    Centos7 安装clamav杀毒
    jenkins 自动化部署
    docker 安装redis
    linux CentOS7 安装字体库-转
    docker 安装jenkins
    linux 下安装docker
    linux 下安装redis
    linux 下mongo 基础配置
    Linux下MongoDB安装和配置详解
  • 原文地址:https://www.cnblogs.com/qingzhi/p/5327576.html
Copyright © 2011-2022 走看看