查看: 978|回复: 0
打印 上一主题 下一主题

[其他] Unity的C#入门基础5

[复制链接]
yanny    

600

主题

0

听众

1万

积分

版主

Rank: 7Rank: 7Rank: 7

纳金币
11094
精华
0

优秀版主 荣誉管理 论坛元老

跳转到指定楼层
楼主
发表于 2017-10-30 11:57:47 |只看该作者 |倒序浏览
鸣谢:杭者(http://www.cnblogs.com/HangZhe/)

一、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);//指向同一个实例,都是在原来的内存上进行更改操作

分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2025-6-29 17:18 , Processed in 0.214200 second(s), 32 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部