一、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#基础学习(五)的更多相关文章

  1. Python基础学习五

    Python基础学习五 迭代 for x in 变量: 其中变量可以是字符串.列表.字典.集合. 当迭代字典时,通过字典的内置函数value()可以迭代出值:通过字典的内置函数items()可以迭代出 ...

  2. Hibernate基础学习(五)—对象-关系映射(下)

    一.单向n-1 单向n-1关联只需从n的一端可以访问1的一端. 域模型: 从Order到Customer的多对一单向关联.Order类中定义一个Customer属性,而在Customer类不用存放Or ...

  3. 关于Unity的C#基础学习(四)

    一.数组 存放同种类型的一组数据,同类+多个 1.定义 int [] int_set; int_set=new int[10];  //在堆上分配出10个int,int_set是数组的引用变量,指向1 ...

  4. 关于Unity的C#基础学习(三)

    面向对象 一.编码注意 1.每个C#的脚本只有唯一的一个类是继承自MonoBehaviour 2.类的名字要和我们的文件名字一样 3.代码的缩进 个人习惯:在类的内部来访问数据成员/成员函数的时候,用 ...

  5. 关于Unity的C#基础学习(二)

    一.Debug的使用 int a=3; Debug.Log("a="+a); 二.整数的定义 int m; Debug.Log(m);  //C#比C更严谨,没有初始化的变量打印出 ...

  6. Java基础学习(五)—Collection

    一.Collection概述 1.数组和集合的区别 (1)长度区别      数组长度是固定的,集合长度是可变的. (2)存储内容区别      数组只能存放同一种类型的元素(基本类型/引用类型). ...

  7. Django基础学习五_引入静态文件

    今天继续学习Django,今天主要掌握两个小点 一.如果为Django项目中引入静态文件 1.先要在project目录下创建static的目录,然后将jquery文件拷贝这个目录下就可以了 2.在pr ...

  8. 关于Unity的C#基础学习(一)

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

  9. bootstrap基础学习五篇

    bootstrap表格 Bootstrap 提供了一个清晰的创建表格的布局.下表列出了 Bootstrap 支持的一些表格元素: 标签 描述 <table> 为表格添加基础样式. < ...

随机推荐

  1. KineticJS教程(10)

    KineticJS教程(10) 作者: ysm  10.在容器之间移动图形对象 Kinetic支持通过图形对象的moveTo(container)方法把图形对象从一个容器移动到另一个容器里,这个容器指 ...

  2. c++初始化函数列表

    以下三种情况下需要使用初始化成员列表: 一,需要初始化的数据成员是对象的情况: 二,需要初始化const修饰的类成员: 三,需要初始化引用成员数据: 原因: C++可以定义引用类型的成员变量,引用类型 ...

  3. DBA 需要知道N种对数据库性能的监控SQL语句

    --DBA 需要知道N种对数据库性能的监控SQL语句 -- IO问题的SQL内部分析 下面的DMV查询可以来检查当前所有的等待累积值. Select wait_type, waiting_tasks_ ...

  4. [Swift A]-问号&感叹号

    1.必须赋值的变量,或普通变量 var month:Int println("month:\(month)") 上面这2句代码会提示报错,因为没有赋值 2.再看看如下写法 var ...

  5. java反射--动态加载

    Class.forName("类的全称") 1)不仅表示类的类类型,还表示了动态加载类 2)请区分编译,运行 3)编译时刻加载类是静态加载类,运行时刻加载类是动态加载类 比如下面: ...

  6. 【Redis】redis 五种数据结构详解(string,list,set,zset,hash)

    redis 五种数据结构详解(string,list,set,zset,hash) Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存 ...

  7. Linux-Vim使用技巧

    cd /tmp  切换到/tmp目录下面 vim shijiazhuang.txt  编辑shijiazhuang.txt文件 welcome to shijiazhuang. yu hua qu c ...

  8. 动态时间规整-DTW算法

    作者:桂. 时间:2017-05-31  16:17:29 链接:http://www.cnblogs.com/xingshansi/p/6924911.html 前言 动态时间规整(Dynamic ...

  9. unity, editorWindow lose data when enter play mode

    我写了个editorWindow,其中有个成员变量m_x,在创建editorWindow的时候为m_x赋的值,而在editorWindow的OnGUI里把m_x显示出来. 当我开着这个editorWi ...

  10. HTML中css和js链接中的版本号

    背景 在搜索引擎中搜索关键字.htaccess 缓存,你可以搜索到很多关于设置网站文件缓存的教程,通过设置可以将css.js等不太经常更新的文件缓存在浏览器端,这样访客每次访问你的网站的时候, 浏览器 ...