关于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(),所有实例公用,一条一条执行。常住内存,永远不会回收的,除非程序员自己删除
关于Unity的C#基础学习(一)的更多相关文章
- 关于Unity的C#基础学习(四)
一.数组 存放同种类型的一组数据,同类+多个 1.定义 int [] int_set; int_set=new int[10]; //在堆上分配出10个int,int_set是数组的引用变量,指向1 ...
- 关于Unity的C#基础学习(三)
面向对象 一.编码注意 1.每个C#的脚本只有唯一的一个类是继承自MonoBehaviour 2.类的名字要和我们的文件名字一样 3.代码的缩进 个人习惯:在类的内部来访问数据成员/成员函数的时候,用 ...
- 关于Unity的C#基础学习(二)
一.Debug的使用 int a=3; Debug.Log("a="+a); 二.整数的定义 int m; Debug.Log(m); //C#比C更严谨,没有初始化的变量打印出 ...
- 关于Unity的C#基础学习(五)
一.get/set访问器 class Person{ int my_age; //默认私有权限 int sex; //属性,类似于函数,但是又不是函数的东西 public int age{ get{ ...
- unity 基础学习 transform
unity 基础学习 transform 1.unity采用的是右手坐标系,X轴右手为+,Y轴向上为+,Z轴朝里为+; 但是我们从3D MAX中导入模型之后,发现轴向并没有遵从这个原理, 其实是 ...
- 如何从零基础学习VR
转载请声明转载地址:http://www.cnblogs.com/Rodolfo/,违者必究. 近期很多搞技术的朋友问我,如何步入VR的圈子?如何从零基础系统性的学习VR技术? 本人将于2017年1月 ...
- 怎么规划一个零基础学习Unity3D的“方法”或者“流程”?
具体出处:https://www.zhihu.com/question/35542990 我只是一个计算机相关专业毕业的,已经掌握了基础的C#并开发过.net的.目前突然心血来潮对unity3D有兴趣 ...
- salesforce 零基础学习(五十二)Trigger使用篇(二)
第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...
- IOS基础学习-2: UIButton
IOS基础学习-2: UIButton UIButton是一个标准的UIControl控件,UIKit提供了一组控件:UISwitch开关.UIButton按钮.UISegmentedContro ...
随机推荐
- Linux系统中的信号量(semphore)与互斥体(mutex)
http://www.embexperts.com/viewthread.php?tid=31 两者最大区别:信号量可以允许多个线程进入临界区,而互斥体只允许一个线程进入临界区.本贴将描述信号量与互斥 ...
- 基于Java的在线聊天室
概述 Java socket编程,实现一个在线聊天室, 实现在线用户群聊,私聊,发送文件等功能. 详细 代码下载:http://www.demodashi.com/demo/13623.html 一. ...
- Percona Toolkit工具集介绍
部署mysql工具是一个非常重要的部分,所以工具的可靠性和很好的设计非常重要.percona toolkit是一个有30多个mysql工具的工具箱.兼容mysql,percona server,mar ...
- JAVA编译器常量
编译器常量的特点就是:它的值在编译期就可以确定.比如: final int i = 5; 再傻的编译器也能在编译时看出它的值是5,不需要到运行时.对于运行时常量,它的值虽然在运行时初始化后不再发生变化 ...
- C#指南,重温基础,展望远方!(9)C#接口
接口定义了可由类和结构实现的协定. 接口可以包含方法.属性.事件和索引器. 接口不提供所定义的成员的实现代码,仅指定必须由实现接口的类或结构提供的成员. 接口可以采用多重继承. 在以下示例中,接口 I ...
- 禁止IE7的页面缩放功能
注册表键 HKEY_CURRENT_USER/Software/Microsoft/Internet Explorer/Zoom 下, 设置DWORD 值 ZoomDisabled 等于 1. 如 ...
- ASP.NET Web API 控制器执行过程
http://www.cnblogs.com/jin-yuan/p/3952605.html
- MFC显示GIF动画图片
本帖则将讨论如何在MFC的对话框里显示GIF动画图片.一些关于传统控件的美化方法正在研究当中会陆续发帖的. 这是本帖用到的一个VS2008例程. 附件 GifPicture.rar (138.1 ...
- ansible 提示安装sshpass
之前用ansible一直用的root身份.机器之间又早早的做好了ssh信任.所以一直也没有出现什么问题.今天想想自己不能这么浪了,还是用回普通用户吧: 然而马上就遇到了第一个问题,ansible提示安 ...
- asp.net mvc部署iis常见问题
1.Q:iis比网上的少很多选项 A:iis没装全,去控制面板里把没勾选的选项勾选 2.Q:发布mvc遇到的HTTP错误 403.14-Forbidden解决办法 A:需要在web.config里添加 ...