1.object中的方法
object中的静态方法:
静态方法Equals判断两个对象是否相等:
最终的判断权,交给左侧对象的Equals方法,
不管值类型引用类型都会按照左侧对象Equals方法的规则来进行比较
静态方法Reference Equals:
比较两个对象是否是相同的引用,主要是用来比较引用类型的对象。
值类型对象返回值始终是false。
//值类型Equals方法比较
Debug.Log(object.Equals(1,1));
//引用类型Equals方法比较
Test t = new Test();
Test t2 = new Test();
//引用类型比较的是对应的路径是否一致
Debug.Log(object.Equals(t, t2));
//ReferenceEquals只用来比较引用类型对象。
Debug.Log(object.ReferenceEquals(t, t2));
object中的成员方法:
普通方法GetType:
该方法在反射相关知识点中是非常重要的方之之后我们会具体的讲解这里返回的Type类型。
该方法的主要作用就是获取对象运行时的类型Type,
通过Type结合反射相关知识点可以做很多关于对象的操作。
普通方法Memberwiseclone:
该方法用于获取对象的浅拷贝对象,口语化的意思就是会返回一个新的对象,
但是新对象中的引用变量会和老对象中一致。
class Test {
public int i = 0;
public Test2 t2 = new Test2();
//将自身MemberwiseClone方法传递出去
public Test Clon()
{
return MemberwiseClone() as Test;
}
}
class Test2
{
public int i = 0;
}
public class GetInfo : MonoBehaviour
{
private void Start()
{
Test t = new Test();
Test test = t.Clon();
Debug.Log("t.i " + t.i);
Debug.Log("t.t2.i " + t.t2.i);
Debug.Log("test.i " + test.i);
Debug.Log("test.t2.i " + test.t2.i);
Debug.Log("--------------------");
test.i = 10;
test.t2.i = 10;
Debug.Log("t.i " + t.i);
Debug.Log("t.t2.i " + t.t2.i);
Debug.Log("test.i " + test.i);
Debug.Log("test.t2.i " + test.t2.i);
}
}
object中的虚方法:
虚方法Equals
默认实现还是比较两者是否为同一个引用,即相当于Reference Equals。但是微软在所有值类型的基类system.Value Type中重写了该方法,用来比较值相等。我们也可以重写该方法,定义自己的比较相等的规则
虚方法GetHashCode
该方法是获取对象的哈希码(一种通过算法算出的,表示对象的唯一编码,不同对象哈希码有可能一样,具体值根据哈希算法决定),我们可以通过重写该函数来自己定义对象的哈希码算法,正常情况下,我们使用的极少,基本不用。
虚方法Tostring(非常常用)
该方法用于返回当前对象代表的字符串,我们可以重写它定义我们自己的对象转字符串规则,该方法非常常用。当我们调用打印方法时,默认使用的就是对象的To string方法后打印出来的内容。
字符串指定位置获取:
//字符串本质是char数组
string str = "123";
Debug.Log(str[0]);//1
字符串拼接:
string str = "123";
str = string.Format("{0}{1}", str, 123);
Debug.Log(str);//123123
正向查找字符位置:
string str = "娃哈哈施工队";
int index = str.IndexOf("哈");
int li = str.IndexOf("里");
Debug.Log(index);//1
Debug.Log(li);//-1
找到了返回第一个符合的索引,找不到返回-1。
反向查找字符位置:
string str = "娃哈哈施工队";
int index = str.LastIndexOf("哈");
Debug.Log(index);//2
字符中有多个目标字符,想要获取后面的字符,可以使用LastIndexOf。
移除指定位置及后面的字符:
string str = "娃哈哈施工队";
//直接remove不会删除原字符,只会返回一个新的字符
//str.Remove(3);
str = str.Remove(4);
Debug.Log(str);//娃哈哈施
//在指定位置删除指定个字符
str = str.Remove(2,1);//索引2开始删除一个字符
Debug.Log(str);//娃哈施
替换指定字符审:
string str = "娃哈哈施工队";
str = str.Replace("哈","嘿");
Debug.Log(str);//娃嘿嘿施工队
大小写转换:
string str = "sfsdfs";
str = str.ToUpper();
Debug.Log(str);//SFSDFS
str= str.ToLower();
Debug.Log(str);//sfsdfs
字符串截取:
string str = "娃哈哈施工队";
//截取从指定位置之后的字符
str = str.Substring(2);
Debug.Log(str);//哈施工队
str = str.Substring(1,1);
Debug.Log(str);//施
字符串切割:
string str = "娃哈哈.施工队";
//截取从指定位置之后的字符
string[] ss = str.Split('.');
Debug.Log(ss[0]);//娃哈哈
string[] str = { "h", "e", "l", "l", "o" };
str = str.Reverse().ToArray();
for (int i = 0; i < str.Length; i++)
{
Debug.Log(str[i]);
}
C#提供的一个用于处理字符串的公共类
主要解决的问题是:
1.修改字符串而不创建新的对象,需要频繁修改和拼接的字符串可以使用它,可以提升性能
2.使用前需要引用命名空间
String Builder存在一个容量的问题,每次往里面增加时会自动扩容
StringBuilder stringBuilder = new StringBuilder("1111");
//获得容量
Debug.Log(stringBuilder.Capacity);//16 默认初始化给定了16个长度
//获得字符长度
Debug.Log(stringBuilder.Length);//真实长度
增删改查:
StringBuilder str = new StringBuilder("1111");
//增
str.Append("222");
str.AppendFormat("{0}{1}", 15551, 254454452);
Debug.Log(str);
Debug.Log(str.Capacity);//超出首次限定的长度,会重新指定长度,翻倍到32
//插入
str.Insert(1, "999");
Debug.Log(str);//1999……
//删
str.Remove(0, 1);//从0索引开始删除1个元素
//清空
//str.Clear();
//查
Debug.Log(str[2]);
//改
str[0] = 'A';
//替换
str.Replace("9", "B");
Debug.Log(str);
//判断相等
if (str.Equals("123"))
{
Debug.Log("1");
}