第二章:深入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     }

收工!

原文地址:https://www.cnblogs.com/qingzhi/p/5327576.html