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

摘要:
新类型[capacity]2.访问数组引用变量名称[index],int_ set[0]=0,int_ set[1]=1,int_ set[1]=2,访问数组元素。格式:类名。变量名,全局唯一的publicstaticfloatPI=3.14F//存储在数据段上,所有类共享相同的内存。对于由static修改的静态变量,静态函数不具有此功能,并且无法访问实例数据,因为其调用完全独立于实例。每个实例都有一个只读变量,这与前面的静态变量和常量变量不同。例如,classPoint<int>{intxpos;intypos;}注意:如果数据成员是泛型的,那么类也应该是泛型的。使用UnityEngine;这是Unity的名称空间,具有强大的企业品牌。
一、数组

存放同种类型的一组数据,同类+多个

1.定义

int [] int_set;

int_set=new int[10];  //在堆上分配出10个int,int_set是数组的引用变量,指向10个int大小的内存空间。new 类型[容量]

2.访问

数组引用变量名称[索引],int_set[0]=0,int_set[1]=1,int_set[1]=2,访问数组的元素。

数组大小是有限的,所以数组访问千万不能越界,10个元素大小的数组,索引就是0到9,100个元素大小的数组,索引就是0到99。

数组容量一旦确定,就无法再扩展。

索引可以是常量也可以是变量。int_set[index]=5;

3.遍历

访问数组里面的每一个元素

for(int i=0;i<10;i++)

{

  int_set[i]=i+1;

  Debug.Log(int_set[i]);

}

二、String

1.string.Fromat格式化创建一个字符串

string str=string.Fromat("{0} {1} {2}",“xiaoming”,10,"male");

Debug.Log(str);

群发短信//XXX,祝福你新年快乐

for(int i=0;i<10;i++)

{

  string fmr_str="{0}:{1} happy new year";

  Debug.Log(string.Format(fmt_str,i,i));

}

2.字符串相等判断

str="Liming";

if(str.Equals("Liming")){

  Debug.Log("Equals");

}

3.转换大小写

str.ToUpper();//全部转大写

str.ToLower();//全部转小写

三、static的用法

1.static类的静态方法---不需要实例(与类的实例没有任何关系)就可以调用,格式:类名.函数方法名字,全局唯一。

int age;

public void normal()

{

  this.age=0;

}

public static void test()

{

  //由于没有对象实例,不能访问对象的数据成员

  Debug.Log("Person test");

}

//调用

Person p;

p=new Person();

p.normal();//需要类的实例调用

Person.test();//不需要类的实例直接用类名调用

//用途

用于一些只有逻辑,没有对象的计算,比如我们平时用的Math.sum(),Math.sort(),Math.sin(),Math.cos()等等处理纯粹的逻辑。

2.static类的静态变量(类.变量名称)---不需要实例(与类的实例没有任何关系)就可以调用。格式:类名.变量名字,全局唯一

public  static  float PI=3.14F;//存放在数据段上,所有的类都共用同一个内存。在编译的时候静态的内存已经释放出来了,永远不会放弃,全局唯一。

//使用

Person.PI=3.14f;

注意:普通的成员函数,成员变量,可以通过this,来访问实例的数据成员。static修饰的静态变量,静态函数是没有this的,并且不能访问实例的数据,因为它的调用压根就和实例无关。

//内存中的存放位置

在数据段中,全局变量,不可被修改

四、const的用法

const修饰的类的成员变量,在编译的时候确定的常量,一旦把一个变量定义为const,你就再也无法修改,全局唯一。格式:类名.变量名

public (static) const int t=3;

Person.t=4;//语句是错误的,不能修改的

Debug.Log(Person.t);//只能去访问,读取

//用途

在写代码逻辑的过程中,需要用一个有意义的名字来代表一个数IDLE , ATTACK , DEAD , WALK     1,2,3,4

//内存中的存放位置

在数据段中,全局变量,不可被修改

五、readonly的用法

实例化时确定的变量,const修饰的类的成员变量,还有一次修改的机会,这个机会在对象的构造函数里面可以使用,后面就再也不能修改。像性别变量sex,一出生就注定的变量,或者是父母变量,一出生就注定的变量。

每一个实例都有一个readonly变量,和前面的static和const不一样。格式:对象引用变量名.变量名

public readonly int t=4;

public Person()

{

  this.t=5;
}

六、泛型编程

1.首先指明一个泛型类,这东西其实是一种模板。

class Point<T>{

  T xpos;

  T ypos;

}

2.实例化泛型类,指明这个泛型到底是哪种类型Point<int>

Point<int> point=new Point<int>();

Point<float> p_float=new Point<float>();

Point<double> p_double=new Point<double>();

3.编译器会使用模板为我们创建相应的类,这个过程是隐示的。

class Point<int>{

  int xpos;

  int ypos;

}

注意:如果数据成员要做成泛型的,类也要做成泛型的。

七、名字空间的使用

在项目开发的过程中,难免会用同样的类名字,所以就要使用名字空间,名字空间带着开发者很强的烙印。

例子:A公司开发了软件的一部分代码,里面有一个类的名字是pay,B公司开发了软件的另外一部分代码,里面也有一个类的名字是pay,

当最后两家开发公司的代码整合后,如果C用户来使用这一软件,发现,调用pay类的时候会出现冲突,不知道要用谁的pay,这就需要使用名字空间来区分两家公司定义的类。

所以,如果是做底层的开发人员,在把自己写的东西SDK,库,给别人的时候要记得加名字空间。

using UnityEngine;就是Unity的名字空间,带着很强的公司烙印。

就像在福建有个人叫李伟,在广东也有一个人叫李伟,在浙江也有一个人叫李伟,我们之所以可以区分他们,是因为他们的地区不同,用省份进行了分区

1.自定义名字空间:

namespace my_namespace{

  class Person(){

    int xpos;

    int ypos;

  }

}

2.在外面就算也有一个名为Person的类也没关系,因为两者的名字空间不同。

my_namespace.Person person=new my_namespace.Person();

注意:为了不在每个类前面都写一个名字空间,可以使用using my_namespace;

也就是在开头写:

using my_namespace;//意思就是加入一个搜索范围来查找类或方法,

namespace my_namespace{

  class Person(){

    int xpos;

    int ypos;

  }

}

搜索类的定义的过程:

首先会查找当前名字空间也可以理解为当前.cs文件中有没有定义这个类,没有再从第一个using的名字空间范围里开始找起,直到找到处于当前名字空间且与所查找的类的名字相同的类或方法。

免责声明:文章转载自《关于Unity的C#基础学习(四)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇利用Bing翻译API简单的实现一个翻译工具ros机器人之动作(二)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【三思Unity】深入浅出资源管理之:Asset Import Pipeline v2(上)

每个游戏都是由种类繁多的资源构成,例如:网格、材质、纹理、着色器、动画、音频等。导入并管理这些资源文件,是游戏引擎必备的能力。资源管理包含两部分:离线管理和运行时管理。 在 Unity 2019 LTS 中,对应的解决方案分别是 Asset Import Pipeline v2(下文简称 AIP v2) 和 Addressable Asset System...

单片机沉思录——再谈static

静态变量作用范围在一个文件内,程序开始时分配空间,结束时释放空间,默认初始化为0,使用时可以改变其值。     静态变量或静态函数只有本文件内的代码才能访问它,它的名字在其它文件中不可见。用法1:函数内部声明的static变量,可作为对象间的一种通信机制     如果一局部变量被声明为static,那么将只有唯一的一个静态分配的对象,它被用于在该函数的所...

数据结构与算法80道

1. 把二元查找树转变成排序的双向链表 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不能创建任何新的结点,只调整指针的指向。    10  /  6 14  / / 4 8 12 16  转换成双向链表 4=6=8=10=12=14=16。   首先我们定义的二元查找树 节点的数据结构如下:  struct BSTreeN...

多线程下C#如何保证线程安全?

  多线程编程相对于单线程会出现一个特有的问题,就是线程安全的问题。所谓的线程安全,就是如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的。 线程安全问题都是由全局变量及静态变量引起的。   为了保证多线程情况下,访问静态变量的安全,可以用锁机制来...

Unity打开VisualStudio一直显示hold on的解决办法(自醒)

我的VS版本:Visual Studio Community2022     我的Unity版本:unity2020.3.24     我的Visual版本:vs2022 我一开始在unity hub下载自带的2019版本,可气的是他直接装我C盘上了,我就给卸载了。又去官网上下载了最新版本,在unity里面配置好了启动器 问题:我Visual单独点击可以...

TS Eslint规则说明

"no-alert": 0,//禁止使用alert confirm prompt "no-array-constructor": 2,//禁止使用数组构造器 "no-bitwise": 0,//禁止使用按位运算符 "no-caller": 1,//禁止使用arguments.caller或arguments.callee "no-catch-sha...