关于Unity的C#基础学习(五)
一、get/set访问器
class Person{
int my_age; //默认私有权限
int sex;
//属性,类似于函数,但是又不是函数的东西
public int age{
get{
return my_age;
} //读的访问器
set{
this.my_age=value;//或者this.my_age=value*2;也可以,value指的是外部传进来的值,外部赋值表达式等号右边给的值
} //写的访问器,指的是我们传过来的value;
}//get/set也可以加权限修饰符,但是一般不写,默认public
}
使用的时候
Person p=new Person();
p.age=10;//自动调用set方法
Debug.Log(p.age);//自动调用get方法
二、struct结构体
数据类型
1.基本数据类型
在栈上面定义一个局部变量a,4个字节。
int a;
a=4;
基本数据类型,是传值
int a;
b=a;
2.引用数据类型,传的是引用,其实也是赋值,但是赋的是地址,或者叫引用
Person p1;
p1=new Person();
Person p2;
p2=p1;
3.结构体,传的是指,
//声明
struct Point{
(public) int x;
(public) int y;
}
//定义一个局部变量,是一个结构体的值,会完成的在栈上分配内存。结构体,你的变量定义在哪里,那么结构体的内存就分配在哪里。
Point point;
point.x=10;
point.y=10;
如果类的成员变量的赋值也这么写的话,就会有问题,因为还没有new出来一个实例,还没有分配内存。
//赋值
point1=point;//把值传递过去,x传x的,y传y的
注意:a.结构体也可以像类一样的拥有成员,成员函数。
b,系统会为它自动生成一个默认构造函数,这个默认构造函数会把每一个数据成员赋值为0,绝对不允许重载结构体默认的构造函数,但是可以写不同传入参数的结构体构造函数,也就是多态的样子。
c.结构体不允许使用没有初始化的成员变量
d.如果结构体的定义是作为类的成员变量,那么定义的结构体就是在类的new的堆上面占用内存。
例子
//开头
struct point{
(public) int x;
(public) int y;
/*public Point(){
this.x=0;
this.y=1;
}*///自己重载默认的构造函数是错误的
public Point(int x,int y){
this.x=x;
this.y=y;
}//可以
public void set_pos(int xpos,int ypos){
this.x=xpos;
this,y=ypos;
}
}
//类Perosn中
public static void set_point_value(Point pt){
pt.x=10;
pt.y=10;
}//函数参数传值
public static void set_point_value(ref Point pt){
pt.x=10;
pt.y=10;
}//函数参数传引用
//start()中
Point point1;//并没有调用构造函数,只是分配了实例化的内存而已。
point1=new Point();//new 关键字+构造函数,使得这个结构体调用了它的默认的构造函数。注意,这里调用结构体的默认的构造函数,不会再堆上产生任何中间的产物,这和类的new是完全不同的。
point1.x=10;
Debug.Log(point1.x+" "+point1.y);//10,0
point1=new Point(100,100);
Debug.Log(point1.x+" "+point1.y);//100,100
Person.set_point_value(point1);
Debug.Log(point1.x+" "+point1.y);//100,100,传的是值,不是像类的那样
Person.set_point_value(ref point1);
Debug.Log(point1.x+" "+point1.y);//10,10,传的是引用,指向原来结构体
out和引用的区别,以类为参数类型,如果是基本类型和struct类型的传引用是用ref关键词
//out
Person my_person;
out_Person(out my_person);//把值带出来,也就是在函数里面创建一个,new一个新的实例,最后把实例赋值给外面的那个my_person
//引用
my_person=new Person();
out_Person(my_person);//指向同一个实例,都是在原来的内存上进行更改操作
关于Unity的C#基础学习(五)的更多相关文章
- Python基础学习五
Python基础学习五 迭代 for x in 变量: 其中变量可以是字符串.列表.字典.集合. 当迭代字典时,通过字典的内置函数value()可以迭代出值:通过字典的内置函数items()可以迭代出 ...
- Hibernate基础学习(五)—对象-关系映射(下)
一.单向n-1 单向n-1关联只需从n的一端可以访问1的一端. 域模型: 从Order到Customer的多对一单向关联.Order类中定义一个Customer属性,而在Customer类不用存放Or ...
- 关于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更严谨,没有初始化的变量打印出 ...
- Java基础学习(五)—Collection
一.Collection概述 1.数组和集合的区别 (1)长度区别 数组长度是固定的,集合长度是可变的. (2)存储内容区别 数组只能存放同一种类型的元素(基本类型/引用类型). ...
- Django基础学习五_引入静态文件
今天继续学习Django,今天主要掌握两个小点 一.如果为Django项目中引入静态文件 1.先要在project目录下创建static的目录,然后将jquery文件拷贝这个目录下就可以了 2.在pr ...
- 关于Unity的C#基础学习(一)
一.程序包含 1.数据:运行过程中产生的 2.代码:代码指令 数据和代码都是存放到内存中的,代码指令在程序加载的时候放到内存,数据是在程序运行的时候在内存中动态地生成,随时会被回收,要定义变量来存放数 ...
- bootstrap基础学习五篇
bootstrap表格 Bootstrap 提供了一个清晰的创建表格的布局.下表列出了 Bootstrap 支持的一些表格元素: 标签 描述 <table> 为表格添加基础样式. < ...
随机推荐
- OpenJudge百炼习题解答(C++)--题4010:2011
题: 总时间限制: 1000ms 内存限制: 65536kB 描写叙述 已知长度最大为200位的正整数n.请求出2011^n的后四位. 输入 第一行为一个正整数k,代表有k组数据,k<=2 ...
- JUnit单元测试基础要点
JUnit单元测试基础要点 1.JUnit是一种测试代码的框架,测试的目的是:保证代码没错,而不是保证代码正确. 2.测试类一般不要和目标类放在一起,但编译成的class文件是放在一起的. 3.单元测 ...
- ant design pro (八)构建和发布
一.概述 原文地址:https://pro.ant.design/docs/deploy-cn 二.详细 2.1.构建 当项目开发完毕,只需要运行一行命令就可以打包你的应用: npm run buil ...
- android 利用cmdline,将參数从preloader传递到kernel
以定义參数 cus_param 为例.int型变量. 1. Preloader部分 Platform.h(mediatek\platform\[$platform]\preloader\src\dri ...
- 正则表达式总结 java 等
这个经常用的到,就来总结一下 #一下是JAVA中的正则表达式 在 JDK1.4 里有了自己的正则表达式 API 包,JAVA 程序员可以免去找第三方提供的正则表达式库的周折了,我们现在就马上来了解一下 ...
- 深度介绍Linux内核是如何工作的
本文发表于Linux Format magazine杂志,作者从技术深度上解释了Linux Kernel是如何工作的.相信对Linux开发者来说有不小的帮助. 牛津字典中对"kernel&q ...
- 系统学习NIO
概述 适用于有一定编程基础的朋友,想系统学习NIO这块知识的朋友.知识点大体分3块:1:>概念了解(各类IO) 2>NIO的核心(缓存区,通道等) 3>网络IO 详细 代码下载:ht ...
- MySQL学习记录一
1.MySQL join操作 left join以左表为基础,其记录会全部表示出来,而右表只显示满足搜索条件的记录.right join以右表为基础,其记录会全部显示出来,而左表只显示满足搜索条件的记 ...
- 基于Redis的消息队列php-resque
转载:http://netstu.5iunix.net/archives/201305-835/ 最近的做一个短信群发的项目,需要用到消息队列.因此开始了我对消息队列选型的漫长路. 为什么选型会纠结呢 ...
- 51单片机晶振11.0592M延时函数
/********************************************** º¯ÊýÃû£ºdelay_ms(uint z) ÑÓʱº¯Êý(12MHZ¾§Õñ) ´Ëº¯ÊýÑ ...