zoukankan      html  css  js  c++  java
  • 关于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);//指向同一个实例,都是在原来的内存上进行更改操作

  • 相关阅读:
    算法的时间与空间复杂度(一看就懂)
    技术人更应该学会即兴表达
    架构设计之「数据库集群方案」
    架构设计之「数据库从主备到主主的高可用方案」
    网络中的「动态路由算法」,你了解吗?
    当你「ping 一下」的时候,你知道它背后的逻辑吗?
    不懂高性能的负载均衡设计?没关系,架构师带你飞
    piwik流量统计系统搭建(apache2.4+piwik+mysql5.6+php5.6.14)
    SQL Server 之 GROUP BY、GROUPING SETS、ROLLUP、CUBE
    CAS 实现单点登录 .NET MVC
  • 原文地址:https://www.cnblogs.com/HangZhe/p/6820947.html
Copyright © 2011-2022 走看看