zoukankan      html  css  js  c++  java
  • 关于Unity的C#基础学习(一)

    一、程序包含

    1.数据:运行过程中产生的

    2.代码:代码指令

    数据和代码都是存放到内存中的,代码指令在程序加载的时候放到内存,数据是在程序运行的时候在内存中动态地生成,随时会被回收,要定义变量来存放数据

    内存存储的最小单位是字节,内存中存放的是二进制数,只有1或者0,叫做位,1个字节可以存放8个bit,8位二进制11111111

    二、C#的基本数据类型

    1.整型(sbyte带符号的1个字节的整数,byte不带符号的1个字节的整数)(short带符号的2个字节的整数/ushort不带符号的2个字节的整数)(int带符号的4个字节的整数/unit不带符号的4个字节的整数)(long带符号的8个字节的整数/ulong不带符号的8个字节的整数)

    2.浮点数(float 32bit=4字节/doouble 64bit=8字节)

    3.逻辑数(true/false)

    4.字符型(16位unicode)

    5.复杂类型的引用变量(C中的指针),有一个100个字节的变量A,变量B指向变量A,那么B所占内存就叫做复杂类型的引用变量(64位的.net那么就是64位,32位的.net那么就是32位)像MonoBehaviour就是一个复杂类型,string定义的字符串也是复杂类型

    注意:C#比C更严谨,float a; a=0.1;是不对的,要写a=0.1f;

    三、C#的权限修饰符

    1.public 类以及类型成员的修饰符

    2.private 类型成员的修饰符

    3.protected 类型成员的修饰符

    4.internal 类以及类型成员的修饰符

    类型成员包括数据成员(类的实例)和类的方法(函数成员),数据成员不属于类,属于类的实例,类中定义多少数据成员,说明类的实例中就有多少数据成员属性。类的方法是逻辑,通用的,是属于类,代码存在固定的地方,只有唯一的一份逻辑,不管有多少个实例都是调用这一个逻辑

    人类

    数据成员:口,牙齿,舌头

    类的方法:吃饭(调用口,牙齿,舌头吞下饭菜)

    四、C#的类的定义

    权限[public外部可以使用类,internal只能在内部使用类 ] +class +类的名称

    public class GameScene {

    }

    组件也是一个类,类就是复杂数据类型

    五、C#的数据成员的定义

    权限[public外部可以直接访问,private外部(定义它的类的大括号外面)不能直接访问,protected继承的类可以访问,internal几乎没用过]+类型+数据成员的名称

    private int age;

    private string name;

    private int sex;

    六、C#的类的方法的定义

    权限+返回值类型+类的方法的名称

    public int setAge(int age){

    逻辑

    }

    输入原料,产生牛奶

    七、C#的类的实例

    1.数据成员(每个实例分配有一组数据成员并占有各自的内存,都不一样,把一个实例的那组数据成员打包就是一个复杂数据对象,引用变量指向复杂数据类型的内存,使用引用变量来访问内存)

    2.通用逻辑(共用的,只有一个,放在内存中,黑盒子,输入什么输出什么)

    MyPerson person; //这里的person并不是类的实例,只是了定义一个类实例化的引用变量,类的实例化必须用new关键词创建

    person=new MyPerson(); //现在才是类的实例化,person引用变量指向实例

    可以使用类的实例引用变量来访问实例的数据成员+调用类的函数方法

    person.age=10;

    person.init_person(10,“xiaohong”);

    八、C#的变量的定义

    1.定义类的一个成员变量(数据成员)

    private int age;

    2.定义一个局部变量(函数内部定义的变量,有效范围是代码执行到这个函数的时候有效,离开这个函数的时候无效,内存回收)

    void start(){

        int a;

    }

    九、C#的this对象

    类的函数,就像一个盒子,先往里面输入什么东西,然后执行盒子内部的逻辑,再输出或者不输出什么。

    已知类的方法在内存中只占用唯一的内存,所有类的实例都是调用公用的类的函数,那么,怎么知道是哪个实例来调用的这个公用函数,怎么知道在处理逻辑的时候到底是处理哪个实例的数据成员的变化

    这时候就需要一个this对象

    MyPerson xiaohong; 

    xiaohong=new MyPerson(); 

    xiaohong.init_person(10,“xiaohong”); //把this对象指向xiaohong引用变量所指向的内存,一起指定那个实例

    MyPerson xiaoming; 

    xiaoming=new MyPerson(); 

    xiaoming.init_person(10,“xiaohong”);//把this对象指向xiaoming引用变量所指向的内存,一起指定那个实例

    MyPerson类中的函数定义

    public void init_person(int age,string name){

      this.age=age;   //xiaohong.age=age

      this.name=name;  //xiaohong.name=name

    }

    this对象,相当于在函数参数传递的时候多传了一个变量进去,(int age,string name,MyPerson this),调用的时候是xiaohong.init_person(10,“xiaohong”,xiaohong); 

    通过this在函数里面访问到指定的类的实例的数据,数据成员是private权限的也可以访问,因为函数是在类内部的。

    十、实例的回收

    在函数中

    MyPerson xiaoming;

    xiaoming=new MyPerson(); 

    MyPerson person=xiaoming;//等于定义一个person引用变量,也指向xiaoming实例,这时候两个引用变量一起指向同一个实例

    当函数执行结束的时候,xiaoming和person都释放掉,等于现在没有一个引用变量指向xiaoming实例,这个实例就会自动被垃圾回收器回收掉,原来实例对象所占用的内存也回收了,程序员是不用管回收的

    十一、内存模型

    1.程序运行时产生,根据执行时遇到的是变量还是对象决定放到栈还是堆内存中

    栈:存放局部变量,函数返回后回收

    堆:存放new出来的复杂对象,数据成员包,没有任何一个引用变量指向实例内存的时候回收

    2.一加载就放到内存中去,一点击exe文件的时候

    数据段:存放数据(全局变量,静态数据)。常住内存,永远不会回收的,除非程序员自己删除

    代码段:存放函数指令,每一个函数都有一个唯一的指令存放在代码段中,init_person(),所有实例公用,一条一条执行。常住内存,永远不会回收的,除非程序员自己删除

  • 相关阅读:
    windows AD监听的端口
    [FreeBSD] 双网卡绑定
    Kea DHCP MySQL
    NTP服务器知识整理
    linux的常用命令
    配置squid集成域身份认证
    Windows上配置PHP的LDAP扩展
    PHP下使用ldap域账户认证密码
    理解syslinux,SYSLINUX和PXELINUX
    优化pxe网启动时tftp的传输速度 --- 针对pxelinux和bootmgr
  • 原文地址:https://www.cnblogs.com/HangZhe/p/6750153.html
Copyright © 2011-2022 走看看