一、unity 基础
1、坐标系:
左手坐标系
右手坐标系
世界坐标系
局部坐标系 、
屏幕坐标系:GUI 左上角是(0,0)、UGUI 左下角是(0,0)
二、字符串
1、字符串属性
.Length:获取字符串长度
string str01 = "asdfsadf"; string str02 = "你好你好" Console.WriteLine("asdfsadf字符段长度:" + str01.Length); Console.WriteLine("你好你好:" + str02.Length); //一个汉字占两位,字符串长度和占位无关
2、 字符串常用方法
a. IsNullOrEmpty(): 判断一个字符串是否为Null或者空
//如果为null或者为空,返回真;否则返回假
string str141 = "";//空字符串(“”)是占内存空间的
string str151 = null;//null是不占空间的
Console.WriteLine(string.IsNullOrEmpty(str141));
Console.WriteLine(string.IsNullOrEmpty(str151));
b. 大小写转换
// ToUpper() 转大写字母
string str1 = "adlalsdkfj";
Console.WriteLine(str1.ToUpper());
// ToLower() 转小写字母
string str2 = "ALKSDJFLKAJSDF";
Console.WriteLine(str1.ToLower());
例子
//输入一个字符,如果是大写字母则转换为小写字母
//A的ASCII码是65,a的ASCII码是97
int c1 = Console.Read();
if(c1 >= 65 && c1 <= 91) //A~Z
{
c1 = c1 + 32;//大写转小写,-32则是小写转大写
Console.WriteLine((char)c1);
}
c. 判断是否相等
//用==判断
string str331 = "12312";
string str332 = "12312";
if (str331 == str332)
{
Console.WriteLine("两个相等");
}
else
{
Console.WriteLine("两个不相等");
}
// Equals()比较两个字符串是否相同,相同返回真,不相同返回假 常用
string str3 = "123";
string str4 = "123";
string str5 = "asdf";
Console.WriteLine(str3.Equals(str4));
Console.WriteLine(str3.Equals(str5));
// Compare()比较字符串是否相等,返回-1,0,1
string str1 = "123";
string str2 = "12345";
string str3 = "123456";
string str4 = "12345";
Console.WriteLine(string.Compare(str1, str2));//小减大为-1
Console.WriteLine(string.Compare(str3, str2));//大减小为1
Console.WriteLine(string.Compare(str2, str4));//相同0
// CompareTo():进行比较,并返回一个整数,该整数指示此实例的值是小于、等于还是大于
string str11 = "撒旦飞";
string str21 = "撒";
string str31 = "撒旦飞";
string str41 = "撒旦飞撒旦飞";
Console.WriteLine(str11.CompareTo(str21));//不相同 1
Console.WriteLine(str11.CompareTo(str31));//相同 0
Console.WriteLine(str11.CompareTo(str41));//不相同-1
d. Substring(index,number):截取字符串,返回截取后的子串
//从第index位后(注意这个后),截取number个字符
string str61 = "你好呀,我是张三,你是谁呀?";
Console.WriteLine(str61.Substring(0, 1));//你
Console.WriteLine(str61.Substring(2, 1));//呀(第二位【呀】取一个)
Console.WriteLine(str61.Substring(2, 2));//呀,
e. Split():分割字符串,返回字符串类型的数组
string str51 = "账号-kub11-密码-123456";
string[] strArr = str51.Split('-');//注意里面填的是字符
foreach(string item in strArr)
{
Console.WriteLine(item);
}
f. Replace("旧字符串","新字符串"):将字符串中的某个字符串替换成一个新的字符串。
//返回新的字符串。
string str111 = "asdfsdfsdf";
Console.WriteLine(str111.Replace("fs", "你好"));
Insert(n,*):插入字符串(第n位后面插入*)
string str141 = "asdfsadfasdf";
Console.WriteLine(str141.Insert(3, "-"));//输出“"asd-fsadfasdf"
g. Remove(n):移除字符串(移除第n位后面的字符串)
string str1 = "123456789";
string str2 = str1.Remove(5);
string str3 = str1.Remove(1);
Console.WriteLine(str2);//输出:12345
Console.WriteLine(str3);//输出:1
h. Copy()复制字符串
string str98 = "asdfasdf";
Console.WriteLine(string.Copy(str98));
i. CopyTo():复制到
string strSource = "changed";
char[] destination = new char[20];
strSource.CopyTo(0, destination, 0, strSource.Length);
//sourceIndex Int32 要复制的此实例中第一个字符的索引。
//destination Char[] 此实例中的字符所复制到的 Unicode 字符数组。
//destinationIndex Int32 destination 中的索引,在此处开始复制操作。
//count Int32 此实例中要复制到 destination 的字符数。
foreach (var item in destination)
{
Console.WriteLine(item);
}
j. 拼接两个string对象
string str71 = "asdf";
string str72 = "你好呀";
//拼接两个string对象1
string str73 = str71 + str72;
Console.WriteLine(str73);
//拼接两个string对象2
string str74 = string.Concat(str71, str72);
Console.WriteLine(str74);
k. PadLeft(n,str3)填充字符串
//(n:填充后的字符长度,str3所要填充的字符,如果省略,则填充空格符号)
string str2 = "123";
char str3 = 'J';
str2 = str2.PadLeft(10, str3);
Console.WriteLine(str2);
l. 查找某字符在字符串中的索引
IndexOf():查找某个字符串在字符串中第一次出现的位置。
//返回所在的索引位置值(索引从0开始)。如果没有找到,返回-1。
string str81 = "qwertyyui";
Console.WriteLine(str81.IndexOf("rt"));
Console.WriteLine(str81.IndexOf("qw"));
LastIndexOf():查找某个字符串在字符串中最后一次出现的位置。
//返回所在的索引位置值。如果没有找到,返回-1。
string str82 = "qwertyyuiui";
Console.WriteLine(str82.LastIndexOf("ui"));
m. StartsWith():判断是否以...字符串开始。
//如果是,返回真;如果不是,返回假。
string str101 = "asdfasdfsdfasdf";
Console.WriteLine("as开头:" + str101.StartsWith("as"));
Console.WriteLine("asf开头:" + str101.StartsWith("asf"));
n. EndsWith():判断是否以...字符串结束。
//如果是,返回真;如果不是,返回假。
string str102 = "asdfasdfsdfasdf";
Console.WriteLine("as结束:" + str102.EndsWith("as"));
Console.WriteLine("df开头:" + str102.EndsWith("df"));
Contains():判断某个字符串中是否包含指定的字符串。
//如果包含返回真,否则返回假。
string str121 = "123456789";
Console.WriteLine("str121中是否存在45字符串:" + str121.Contains("45"));
o. 去空格
Trim():去掉字符串中前后空格。
//返回处理后的字符串。
string str131 = " sdf s fda ssdf asd sd ";
Console.WriteLine(str131.Trim());//输出“sdf s fda ssdf asd sd”
TrimStart():去掉字符串开始前的空格。
//返回处理后的字符串。
string str132 = " sdf s fda ssdf asd sd ";
Console.WriteLine(str132.TrimStart());//输出“sdf s fda ssdf asd sd ”
TrimEnd():去掉字符串结束后的空格。
//返回处理后的字符串。
string str133 = " sdf s fda ssdf asd sd ";
Console.WriteLine(str133.TrimEnd());//输出“ sdf s fda ssdf asd sd”
p. 格式化输出
//1、
string str1 = "1";
string str2 = "2";
string str3 = "3";
Console.WriteLine("{0}+{1}={2}", str1, str2, str3);
Console.WriteLine("{2}+{1}={0}", str1, str2, str3);
//2、
Decimal pricePerOunce = 17.36m;
String s = String.Format("The current price is {0} per ounce.", pricePerOunce);
Console.WriteLine(s);
q. 四舍五入保留两位小数输出
double point = 3.147;
Console.WriteLine("\n四舍五入保留两位小数输出:" + point.ToString("0.00"));
r. StringBuilder
1、 字符串构建器
2、 stringbuilder 是一个类
3、 创建
StringBuilder sb = new StringBuilder();//创建一个对象 //.Append(5) 追加一个数据 sb.Append(5); for(int i =0; i <=10;i++) { sb.Append(i); }Console.WriteLine(sb); //.ToString() 将sb转换为字符串形式
sb.ToString();
//.Clear():清空sb中的数据 sb.Clear();
三、类与对象的关系
类用于描述一类事物的信息,对象是这个类中的一个具体的个体。
四、类的语法
[访问修饰符] class 类名 {
类的描述信息;
}
五、字段
1、字段是之前一直用的变量,变量在面向对象的类中就叫做字段
2、字段作用:和变量是一样的,都是用于存储一些具体的信息
3、字段的语法
public 数据类型 字段名
public:访问修饰符 数据类型:数据类型,如: int , string,float,double; 字段名:变量名,在面向对象编程的类中,变量就叫字段
4、字段的赋值与取值
赋值:对象名.字段名 = 值; 取值:对象名.字段名
六、属性
1、对字段进行保护,将属性设为public,可直接访问;属性保护的字段设置成private,通过属性间接的操作字段。
2、属性语法
public 数据类型 属性名 { get{return 字段名:} set{字段名 = value;} }
数据类型:和要保护的字段的数据类型一样;
属性名:和字段名一样,只不过首字母要大写;
get:当通过属性名取值的时候,会自动调用get中的代码;
set:当通过属性名给字段赋值的时候,会自动调用set中的代码;
value:也是系统关键字,代表赋给属性的值;get和set本质上就是两个函数。
七、命名空间的语法
定义命名空间:namespace 空间名称 { 类 }
引入命名空间:using 空间名称
八、三种方法
1、普通方法
2、构造方法
public 类名()
{
构造函数代码;
}
①构造方法要用public修饰,不能用private修饰;
②构造方法没有返回值,且连void也不能写;
③构造方法的方法名字必须跟类名一样;
④构造方法是可以有重载的。
当我们的类中不写构造方法的时候,在代码编译后,系统会自动给它添加一个空构造方法,如果我们写了一个构造方法,默认的“空构造方法”就不会存在。
3、析构方法
语法: ~类名()
{
析构方法代码体;
}
①析构方法不能有任何参数;
②析构方法无返回值也无访问修饰符;
③析构方法由系统自动调用;
④析构方法可以不写。
九、面向对象的三大特性
1、继承,封装和多态
继承:将一堆类中的一些共有的“成员”单独抽取出来,作为一个父类,然后这一堆类继承这个父类,共享父类的资源
好处:①优化代码结构,让类与类之间产生关系(人不是孤立存在的,类也一样);
②提高代码的复用性,便于阅读(写更少的代码,干更多的活);
③为“多态”提供前提
注意:1、子类继承父类私有部分,但是子类无法访问 2、c#不支持多继承 3、c#可以继承多个接口,接口之间用 , 隔开。
类视图:没有怎么装
工具-》获取工具和功能-》安装详细信息-》单个组件中勾选类设计器。
UML视图:类名、字段、方法。
子类继承父类中哪些:字段 、属性 、方法。
私有变量/方法继承无法访问
十、设计模式中的六大原则
1、单一职责原则
只做一件事,不会做其他不相关或者跨界的事情
2、依赖倒置原则
面向接口编程而不是面向实现编程,依赖于抽象,依赖于接口
3、开闭原则
4、接口隔离原则
使用多个专门的接口比使用单一的总接口要好
5、里氏替换原则
父类存在的地方子类都可以替换,并且行为不发生改变
A0 a0 = new A0(); A1 a1= new A1(); a0=a1;//子类对象可以直接赋值给父类变量
6、合成复用原则
7、迪米特原则
十一:抽象
抽象方法:
使用abstract关键字2,无方法体,抽象方法必须存在于抽象类。
抽象类:
抽象类中可以没有抽象方法
抽象类不能被实例化
十二:接口
c#不支持多继承但可以继承多个接口,用逗号隔开
接口中无字段可有属性,方法是抽象方法不需要abstract关键字
接口中的方法必须全部实现
十三、访问修饰符
1.public[公开访问]公开的访问权限。当前类,子类,实例对象,都可以访问到。
2.private[私有访问]私有的访问权限。只能在当前类内部进行访问使用;子类,实例对象,都访问不到。
3.protected [保护访问]受保护的访问权限。只能在当前类的内部,以及该类的子类中访问;实例对象访问不到。
4.internal[内部访问]只能在当前程序集(项目)中访问;在同一个项目中internal和public的访问权限是一样的。
5.protected internal[内部保护访问]protected+internal的访问权限。
internal 【内部访问】 只能在当前程序集(项目)中访问; 在同一个项目中internal和public的访问权限是一样的
能够修饰类的访问修饰符只有两个,public和internal,类的默认访问符是 internal
类中的成员默认访问修饰符是private
十四、静态属性
被static关键字修饰的字段,叫做“静态字段”, 静态字段存储的数据在内存中只有一份;
静态类不能实例化对象。