zoukankan      html  css  js  c++  java
  • 定义类+类实例化+属性+构造函数+匿名类型var+堆与栈+GC回收机制+值类型与引用类型

    为了让编程更加清晰,把程序中的功能进行模块化划分,每个模块提供特定的功能,而且每个模块都是孤立的,这种模块化编程提供了非常大的多样性,大大增加了重用代码的机会。 面向对象编程也叫做OOP编程 简单来说面向对象编程就是结构化编程,对程序中的变量结构划分,让编程更清晰。

    类的概念

    类实际上是创建对象的模板,每个对象都包含数据,并提供了处理和访问数据的方法。 类定义了类的每个对象(称为实例)可以包含什么数据和功能。

    类中的数据和函数称为类的成员:数据成员        函数成员

    数据成员: 数据成员是包含类的数据--字段,常量和事件的成员。

    函数成员: 函数成员提供了操作类中数据的某些功能。(方法,属性,构造方法和终结器(析构方法),运算符,和索引器)

    字段的声明:访问修饰符 类型 字段名称;

    方法的声明:访问修饰符 返回值类型 方法名称(参数){ //方法体 }

    定义一个类来表示一个顾客:

    class Customer{
        public string name;
        public string address;
        public int age;
        public string buyTime;
        public void Show(){
            Console.WriteLine("名字:"+name);
            Console.WriteLine("年龄:"+age);
            Console.WriteLine("地址:"+address);
            Console.WriteLine("购买时间:"+buyTime);
        }
    }
    在这里我们定义了一个类,叫做Customer(顾客),里面包含了四个字段,存储了顾客的名字,年龄,地址和购买时间,包含了一个Show()方法,用来输出自身的一些信息的,在这里Customer就是一个新的数据类型
    类似于结构体的定义
    struct Customer......;

    如何利用类创建对象:

    使用我们自定义的类声明的变量也叫做对象,这个过程也叫做实例化。

    ClassName myClass = new ClassName();

    其中ClassName是我们定义的类的名字,myClass是我们声明的变量(对象)的名字,后面的new是一个关键字,使用new 加上类型名()表示对该对象进行构造,如果不进行构造的话,这个对象是无法使用的。

    构造函数:

    我们构造对象的时候,对象的初始化过程是自动完成的,但是在初始化对象的过程中有的时候需要做一些额外的工作,例如需要初始化对象存储的数据,构造函数就是用于初始化数据的函数。

    声明基本的构造函数的语法就是声明一个和所在类同名的方法,但是该方法没有返回类型。

    public class MyClass{

    public MyClass()

    { 这个构造函数的函数体 }

    }

    当我们使用new关键字创建类的时候,就会调用构造方法。 我们一般会使用构造方法进行初始化数据的一些操作。 构造函数可以进行重载,跟普通函数重载是一样的规则

    注意: 当我们不写,任何构造函数的时候,编译器会提供给我们一个默认的 无参的构造函数,但是如果我们定义了一个或者多个构造函数,编译器就不会再提供默认的构造函数

    属性的定义:

    属性的定义结构:

    public int MyIntProp{
            get{
                // get code
            }
            set{
                //set code
            }
        }

    1,定义属性需要名字和类型

    2,属性包含两个块 get块和set块

    3,访问属性和访问字段一样,当取得属性的值的时候,就会调用属性中的get块,所以get块,类型需要一个返回值就是属性的类型;

          当我们去给属性设置值的时候,就会调用属性中的set块,我们可以在set块中通过value访问到我们设置的值。

    通过属性来访问字段:

    我们习惯上把字段设置为私有的,这样外界不能修改字段的值,然后我们可以通过定义属性来设置和取得字段中的值。

    private int age;
    public int Age{//习惯上属性大写 字段小写
        set{
            if(value<0)return;
            age = value;
        }
        get{
            return age;
        }
    }

    设置属性的只读或者只写:

    private string name;
    public string name{
        get{
            return name;
        }
    }
    属性可以值只提供一个set块或者get块

    属性的访问修饰符

    public string name{
        get{
            return name;
        }
        private set{
            name = value;
        }
    }

    自动实现的属性

    public int Age{get;set;}
    编译器会自动创建private int age属性

    匿名类型(var)

    我们创建变量(对象的时候),必须指定类型,其实我们也可以不去指定类型,这个就是匿名类型,我们可以使用var声明一个匿名类型。 使用var声明的匿名类型,当初始化的时候,这个变量的类型就被确定下来,并且以后不可以修改。

    var var1 = 34;

     

    堆和栈 : 程序运行时的内存区域

    我们把内存分为堆 空间和栈空间

    栈空间比较小,但是读取速度快 堆空间比较大,但是读取速度慢

    栈的特征: 数据只能从栈的顶端插入和删除 把数据放入栈顶称为入栈(push) 从栈顶删除数据称为出栈(pop)[后进先出] 

    堆是一块内存区域,与栈不同,堆里的内存能够以任意顺序存入和移除

    GC Garbage Collector垃圾回收器:

    CLR的GC就是内存管理机制,我们写程序不需要关心内存的使用,因为这些都是CLR帮我们做了。

     

    值类型和引用类型:

    类型被分为两种:值类型(整数,bool struct char 小数)和引用类型(string 数组 自定义的类,内置的类)。

    值类型只需要一段单独的内存,用于存储实际的数据,(单独定义的时候放在栈中)

    引用类型需要两段内存 第一段存储实际的数据,它总是位于堆中 第二段是一个引用,指向数据在堆中的存放位置

    当我们使用引用类型赋值的 时候,其实是赋值的引用类型的引用 如果数组是一个值类型的数组,那么数组中直接存储值,如果是一个引用类型的数组(数组中存储的是引用类型),那么数组中存储的是引用(内存地址)

  • 相关阅读:
    关于PHP写的投票网站之刷票风云
    《暗战强人:黑客及反黑客工具快速精通》学习笔记
    《Linux信息安全实用教程》学习笔记
    MySql的入侵测试以及防范
    基于Sql Server 2008的分布式数据库的实践(终结)
    Sql Server的弱口令入侵测试以及防范
    IPC$ 测试与防范
    基于Sql Server 2008的分布式数据库的实践(五)
    基于Sql Server 2008的分布式数据库的实践(四)
    基于Sql Server 2008的分布式数据库的实践(三)
  • 原文地址:https://www.cnblogs.com/dsh20134584/p/7384626.html
Copyright © 2011-2022 走看看