|
发表于 2022-11-27 15:07:06
|
显示全部楼层
熟悉记忆查询之用
C#初级
C#简介
【C#】高级语言、微软开发
优点特色:面向对象、面向组件、结构化语言、多平台编译、.Net框架一部分
重要功能:
布尔条件(Boolean Conditions)
自动垃圾回收(Automatic Garbage Collection)
标准库(Standard Library)
组件版本(Assembly Versioning)
属性和事件(Properties and Events)
易于使用的泛型(Generics)
索引器(Indexers)
条件编译(Conditional Compilation)
简单的多线程(Multithreading)
LINQ和Lambda表达式
集成Windows
程序主要部分:命名空间声明using&namespace、类Class、类方法、类属性、主要方法Main、语句和表达式、注释
PS:C#是大小写敏感的、与Java不同文件名可以不同于类的名称
【.Net】.Net Framework
.Net 框架应用程序是多平台的应用程序。框架的设计方式使它适用于下列各种语言:C#、C++、Basic、Jscript、COBOL 等等。所有这些语言可以访问框架,彼此之间也可以互相交互。
.Net 框架由一个巨大的代码库组成,用于 C# 等客户端语言。
应用程序类型:Windows应用程序、Web应用程序、Web服务
框架的组件:公共语言运行库(CLR)、.Net框架类库(Library)、公共语言规范(Specification)、通用类型系统(CTS)、元数据(Metadata)和组件(Assemblies)、Windows窗口(Forms)、http://ASP.Net和http://ASP.Net AJAX、http://ADO.Net、Windows工作流基础(WF)、Windows显示基础(Foundation)、Windows通信基础(WCF)、LINQ
【Console】控制台、C#之System命名空间下的Console类
【Write】【Read】【ReadKey】【Beep】
常用方法:
Console.Write 向控制台直接写入字符
Console.WriteLine 向控制台写入字符后换行
Console.Read 从控制台直接读取一个字符,按下回车键退出
Console.ReadLine 从控制台读取一行字符后换行,按下回车键退出
Console.ReadKey 获取用户按键,并显示在控制台窗口中,按任意键执行退出
Console.Beep 通过控制台扬声器播放提示音
Console.WriteLine 清除控制台缓冲区和相应的控制台窗口的显示信息
PS:有三种形式Console.WriteLine()、Console.WriteLine(变量)、Console.WriteLine("This is {0}",strName[1])
C#数据分类
【constant】常量
字符常量类型:普通字符、转义序列、通用字符
普通字符:
前缀0x或0X表示十六进制,0表示八进制,没有前缀则表示十进制。
前缀U和L分别表示Unsigned 和Long。
前缀D和F分别表示Double 和Float。
使用指数E形式表示时,必须包含整数部分和小数部分或同时包含两者。
转义序列:
\b 退格键、\f 换页符、\n 换行符、\r 回车、\t水平制表符、\v垂直制表符
字符串常量:
字符串常量是括在双引号 "" 里,或者是括在 @"" 里。字符串常量包含的字符与字符常量相似,可以是:普通字符、转义序列和通用字符
定义常量:
常量是使用 const 关键字来定义的 。定义一个常量的语法如下const <data_type> <constant_name> = value; 例:const double pi = 3.14159;
【Const】常量定义关键字
【Value types】值类型
值类型变量可以直接分配给一个值。它们是从类 System.ValueType 中派生的。
PS:类型不同需要转换,隐式类型转换,显式类型转换:(类型)、类型.Parse 、Convert.转换方法、as
C#类型转换
【To】类型转换
C#类型转换方法:ToBoolean布尔类型、ToByte字节类型、ToChar单字符类型、ToDateTime日期时间类型、ToDecimal十进制类型、ToDouble双精度浮点类型、ToInt16 16位整数类型、ToInt32 32位整数类型、ToInt64 64位整数类型、ToSbyte 符号字节类型、ToSingle小浮点数类型、ToString字符串类型、ToType制定类型、ToUInt16 16位无符号整数类型、ToUInt32 32位无符号整数类型、ToUInt64 64位无符号整数类型
【Convert】Convert.加转换方法、强制类型转换、静态方法、值类型或是引用类型转换
例:str=Convert.ToString(num1);
【Parse】类型.Parse、强制类型转换、静态方法、值类型转换
例:str= int.parse(num1);
【as】属于运算符、强制类型转换
as用来把一个引用类型类型转换为另一种引用类型。如果能转换,返回他目标类型。转换不成功,就返回null,而不是抛出异常。例:B b= a as B
C#类型类型
【Bool】布尔值
范围:True或False、默认值:False
【Byte】8位无符号整数
范围:0到255、默认值:0
【Char】16位Unicode字符
范围:U +0000到U +ffff、默认值:&#39;\0&#39;
【Decimal】128位精确的十进制值,28-29有效位数
范围:(-7.9 x 10^28 到 7.9 x 10^28) 即10^0 到 10^28、默认值:0.0M
【Double】64 位双精度浮点型
范围:(+/-)5.0 x 10^-324 到 (+/-)1.7 x 10^308、默认值:0.0D
【Float】32 位单精度浮点型
范围:-3.4 x 10^38 到 + 3.4 x 10^38、默认值: 0.0F
【Int】32 位有符号整数类型
范围:-2,147,483,648 到 2,147,483,647、默认值:0
【Long】64 位有符号整数类型
范围:-923,372,036,854,775,808 到 9,223,372,036,854,775,807 到 2,147,483,647、默认值:0L
【Sbyte】8 位有符号整数类型
范围:-128 到 127、默认值:0
【Short】16 位有符号整数类型
范围:-32,768 到 32,767、默认值:0
【Uint】32 位无符号整数类型
范围:0 到 4,294,967,295、默认值:0
【Ulong】64 位无符号整数类型
范围:0 到 18,446,744,073,709,551,615、默认值:0
【Ushort】16 位无符号整数类型
范围:0 到 65,535、默认值:0
【Reference types】引用类型
内置引用类型: Object对象类型、Dynamic动态类型、String字符串类型。
Object对象类型:是C#通用类型系统(CTS)中所有数据类型的终极基类,可以被分配任何其他类型,但需要进行类型转换。当一个值类型转换为对象类型时,则被称为装箱;当一个对象类型转换为值类型时,则被称为拆箱。例:int val = 8; object obj = val;//先装箱 int nval = (int)obj;//再拆箱
Dynamic动态类型:您可以存储任何类型的值在动态数据类型变量中。这些变量的类型检查是在运行时发生的。例:dynamic <variable_name> = value;
String字符串类型:允许您给变量分配任何字符串值,可以通过两种形式进行分配:引号和 @引号。例:string str = @&#34;C:\Windows&#34;;
【Pointer types】指针类型
指针类型变量存储另一种类型的内存地址。C# 中的指针与 C 或 C++ 中的指针有相同的功能
例:type* identifier;
C#运算符
【A++】先赋值再自增
【Sizeof】属于运算符、用于获取非托管类型的大小(以字节为单位)。
非托管类型包括下表列出的内置类型以及以下类型:枚举类型、指针类型、用户定义的结构,不包含任何属于引用类型的字段或属性
对于所有其他类型(包括结构),sizeof 运算符只能在不安全代码块中使用。 虽然可以使用 Marshal.SizeOf 方法,但此方法返回的值并不总是与 sizeof 返回的值相同。 Marshal.SizeOf 在封送类型后返回大小,而 sizeof 返回公共语言运行时分配的大小(包括所有填充)。
检索int的大小:// Constant value 4: int intSize = sizeof(int);
【Typeof】属于运算符、返回 class 的类型。
【&】属于运算符、返回变量的地址。
【*】属于运算符、变量的指针。将得到变量的实际地址
【?:】属于运算符、条件表达式。
如果条件为真 ? 则为 X : 否则为 Y.
Exp1 ? Exp2 : Exp3;
【Is】属于运算符、判断对象是否为某一类型。If( Ford is Car) // 检查 Ford 是否是 Car 类的一个对象。
C#判断
【If】判断语句关键字
代码结构:
if(){
...
}
else{
...
}
【Switch】判断语句关键字
代码结构:
switch (){
case A:
...
break;
default:
...
break;
}
C#循环
【While】循环语句关键字
如果while()为真循环下面语句
代码结构:
while (){
...
}
如果先运行一次语句,while()为真继续循环运行语句
代码结构:
do{
...
} while ()
【for/foreach】循环语句关键字
init(初始化)会首先被执行一次,condition(条件)符合条件的继续循环,increment(增量)用来控制循环的变量,statement(声明)被执行的循环语句。
代码结构:
for ( init; condition; increment )
{
statement(s);
}
使用foreach可以迭代数组或者一个集合对象。
例子:
foreach (int element in fibarray)
{
System.Console.WriteLine(element);
}
Console.ReadLine();
PS:for (; ; )无限循环
【Break】终止
当 break 语句出现在一个循环内时,循环会立即终止,且程序流将继续执行紧接着循环的下一条语句。
它可用于终止 switch 语句中的一个 case。
【Continue】跳过
continue 会跳过当前循环中的代码,强迫开始下一次循环。对于 for 循环,continue 语句会导致执行条件测试和循环增量部分。对于 while 和 do...while 循环,continue 语句会导致程序控制回到条件测试上。
C#封装
【Public】公开的,任何公有成员可以被外部的类访问
【Private】私有的,只有同一个类中的函数可以访问它的私有成员;
【Protected】保护的,该类内部和继承类中可以访问
【Internal】内部的,同一个程序集的对象可以访问;
【Protected internal】保护或内部的,访问限于当前程序集或派生自包含类的类型。
PS:private < internal/protected < protected internal < public
C#方法
【Method】方法,方法使用步骤定义方法,调用方法;
其中元素:
Access Specifier:访问修饰符,这个决定了变量或方法对于另一个类的可见性。
Return type:返回类型,一个方法可以返回一个值。返回类型是方法返回的值的数据类型。如果方法不返回任何值,则返回类型为 void。
Method name:方法名称,是唯一的标识符,且是大小写敏感的。它不能与类中声明的其他标识符相同。
Parameter list:参数列表,使用圆括号括起来,该参数是用来传递和接收方法的数据。参数列表是指方法的参数类型、顺序和数量。参数是可选的,也就是说,一个方法可能不包含参数。
Method body:方法主体,包含了完成任务所需的指令集。
代码结构:
<Access Specifier> <Return Type> <Method Name>(Parameter List)
{
Method Body
}
PS:一个方法可以自我调用。这就是所谓的递归
【Ref】使用 ref 关键字声明引用参数
按值传递参数和按引用传递参数的不同
【Out】使用 out 关键字声明引用参数
return 语句可用于只从函数中返回一个值。但是,可以使用 输出参数 来从函数中返回两个值。
C#可空类型
【Nullable】可空类型
C# 提供了一个特殊的数据类型,nullable 类型(可空类型),可空类型可以表示其基础值类型正常范围内的值,再加上一个 null 值。
例子:int? i = 3 等同等同于 Nullable<int> i = new Nullable<int>(3);
【?】可空类型
Null 合并运算符用于定义可空类型和引用类型的默认值。Null 合并运算符为类型转换定义了一个预设值,以防可空类型的值为 Null。Null 合并运算符把操作数类型隐式转换为另一个可空(或不可空)的值类型的操作数的类型。
例子:double? num1 = null; double? num2 = 3.14157; num3 = num1 ?? 5.34; 则num3的值为5.34
C#数组
【Array】数组
【Length】【Rank】【Copy】【Clear】【IndexOf】【Sort】【ToString】
数组是一个存储相同类型元素的固定大小的顺序集合。
数组用法例子:
声明数组 double[] balance;
初始化数组 double[] balance = new double[10];
赋值给数组 balance[0] = 4500.0;
访问数组元素 double salary = balance[9];
Array 类的属性:
IsFixedSize 获取一个值,该值指示数组是否带有固定大小。
IsReadOnly 获取一个值,该值指示数组是否只读。
Length 获取一个 32 位整数,该值表示所有维度的数组中的元素总数。
LongLength 获取一个 64 位整数,该值表示所有维度的数组中的元素总数。
Rank 获取数组的秩(维度)。
Array 类的方法:
Clear 根据元素的类型,设置数组中某个范围的元素为零、为 false 或者为 null。
Copy(Array, Array, Int32) 从当前的一维数组中复制所有的元素到一个指定的一维数组的指定索引位置。索引由一个 32 位整数指定。
GetLength 获取一个 32 位整数,该值表示指定维度的数组中的元素总数。
GetLongLength 获取一个 64 位整数,该值表示指定维度的数组中的元素总数。
GetLowerBound 获取数组中指定维度的下界。
GetType 获取当前实例的类型。从对象(Object)继承。
GetUpperBound 获取数组中指定维度的上界。
GetValue(Int32) 获取一维数组中指定位置的值。索引由一个 32 位整数指定。
IndexOf(Array, Object) 搜索指定的对象,返回整个一维数组中第一次出现的索引。
Reverse(Array) 逆转整个一维数组中元素的顺序。
SetValue(Object, Int32) 给一维数组中指定位置的元素设置值。索引由一个 32 位整数指定。
Sort(Array) 使用数组的每个元素的 IComparable 实现来排序整个一维数组中的元素。
ToString 返回一个表示当前对象的字符串。从对象(Object)继承。
数组的多种形式:
多维数组:int [,] a = new int [3,4] { {0, 1, 2, 3} , {4, 5, 6, 7} , {8, 9, 10, 11} };
交错数组:int[][] scores = new int[2][]{new int[]{92,93,94},new int[]{85,66,87,88}};
C#字符串
【String】字符串
【Compare】【Concat】【Copy】【IndexOf】【Insert】【Split】【Join】【Remove】【Replace】【ToLower】
【ToUpper】【Trim】
创建string对象:
通过给String变量指定一个字符串。例:string fame = &#34; hello&#34;;
通过使用String类构造函数。例:string fame = new string(&#34;hello&#34;);
通过使用字符串串联运算符。例:string fullname = fname+lname;
通过检索属性或调用一个返回字符串的方法。
例:string[] state = {&#34;hello&#34;,&#34;im&#34;,&#34;fine&#34;}; string message = String.join(&#34;&#34;,state);
通过格式化方法来转换一个值或对象为它的字符串表示形式。
例:DateTime waiting = new DateTime(2012,10,10,17,58,1);
string chat = String.Format(&#34;Message sent at {0:t} on {0:D}&#34;,waiting);
string类的属性:
Chars:在当前 String 对象中获取 Char 对象的指定位置。
Length:在当前的 String 对象中获取字符数。
string类的方法:
public static int Compare( string strA, string strB )
比较两个指定的 string 对象,并返回一个表示它们在排列顺序中相对位置的整数。该方法区分大小写。
public static string Concat( string str0, string str1 )
连接两个 string 对象。
public bool Contains( string value )
返回一个表示指定 string 对象是否出现在字符串中的值。
public static string Copy( string str )
创建一个与指定字符串具有相同值的新的 String 对象。
public static string Format( string format, Object arg0 )
把指定字符串中一个或多个格式项替换为指定对象的字符串表示形式。
public int IndexOf( char value )
返回指定 Unicode 字符在当前字符串中第一次出现的索引,索引从 0 开始。
public string Insert( int startIndex, string value )
返回一个新的字符串,其中,指定的字符串被插入在当前 string 对象的指定索引位置。
public static bool IsNullOrEmpty( string value )
指示指定的字符串是否为 null 或者是否为一个空的字符串。
public static string Join( string separator, string[] value )
连接一个字符串数组中的所有元素,使用指定的分隔符分隔每个元素。
public string Remove( int startIndex )
移除当前实例中的所有字符,从指定位置开始,一直到最后一个位置为止,并返回字符串。
public string Replace( char oldChar, char newChar )
把当前 string 对象中,所有指定 Unicode 字符替换为另一个指定的 Unicode 字符,并返回新的字符串。
public string[] Split( params char[] separator )
返回一个字符串数组,包含当前的 string 对象中的子字符串,
子字符串是使用指定的 Unicode 字符数组中的元素进行分隔的。
public char[] ToCharArray()
返回一个带有当前 string 对象中所有字符的 Unicode 字符数组。
public string ToLower()
把字符串转换为小写并返回。
public string ToUpper()
把字符串转换为大写并返回。
public string Trim()
移除当前 String 对象中的所有前导空白字符和后置空白字符。
public string Substring(value)
获取子字符串,value填获取位置
【StringBuilder】字符串
string本身是不可改变的,它只能赋值一次,每一次内容发生改变,都会生成一个新的对象。
string 是字符串常量
stringBuffer 是字符串变量(线程安全)
stringBuilder 是字符串变量(非线程安全)
C#时间格式
【DateTime】时间格式
例:DateTime dt = new DateTime(2017,4,1,13,16,32,108);
string.Format(&#34;{0:yyyy/MM/dd HH:mm:ss.fff}&#34;,dt); //2017/04/01 13:16:32.108
string.Format(&#34;{0:yyyy/MM/dd dddd tt hh:mm}&#34;, dt); //2017/04/01 星期六 下午 01:16
dt.ToString(&#34;M MM MMM MMMM&#34;); //4 04 四月 四月
dt.ToString(&#34;d dd ddd dddd&#34;); //1 01 周六 星期六
C#结构体
【Struct】结构体
在C#中,结构体是值类型数据结构。类是引用类型,结构是值类型。结构不支持继承。结构不能声明默认的构造函数。结构体中声明的字段无法赋予初值,类可以。类的对象是存储在堆空间中,结构存储在栈中。堆空间大,但访问速度较慢,栈空间小,访问速度相对更快。
结构可带有方法、字段、索引、属性、运算符方法和事件。
结构可定义构造函数,但不能定义析构函数。不能为结构定义默认的构造函数。
结构可实现一个或多个接口。
例:
struct Books
{
public string title;
public int book_id;
};
public class testStructure{
public static void Main(string[] args){
Books Book1; /* 声明 Book1,类型为 Book */
Book1.title = &#34;C Programming&#34;;
}}
C#枚举
【Enum】枚举
枚举是一组命名整型常量。枚举列表中的每个符号代表一个整数值,一个比它前面的符号大的整数值。默认情况下,第一个枚举符号的值是 0。但可以自定义
例:
class EnumProgram{
enum Days
{
Mon=71,
Tue=61,
};
static void Main(string[] args){
int WeekdayStart = (int)Days.Mon;}}
C#中级
C#类
【Class】类
定义一个类时,定义了一个数据类型的蓝图。对象是类的实例。构成类的方法和变量成为类的成员。
类的结构:
<access specifier> class class_name
{
// member variables,成员变量
<access specifier> <data type> variable1;
// member methods,成员方法
<access specifier> <return type> method1(parameter_list)
{
// method body
}
}
//访问标识符<access specifier>,类的默认访问标识符是 internal,成员的默认访问标识符是 private
//数据类型<data type>指定了变量的类型,返回类型<return type>指定了返回的方法返回的数据类型
//如果要访问类的成员,你要使用点(.)运算符,点运算符链接了对象的名称和成员的名称
构造函数:
类的构造函数是类的一个特殊的成员函数,当创建类的新对象时执行。
构造函数的名称与类的名称完全相同,它没有任何返回类型。
带有参数的构造函数,参数化构造函数
例:
class Line
{
public Line()
{
Console.WriteLine(&#34;对象已创建&#34;);
}
static void Main(string[] args)
{
Line line = new Line();
}
}
折构函数:
类的析构函数是类的一个特殊的成员函数,当类的对象超出范围时执行。
析构函数用于在结束程序(比如关闭文件、释放内存等)之前释放资源。析构函数不能继承或重载。
例:
class Line
{
~Line ()
{
Console.WriteLine(&#34;对象已删除&#34;);
}
}
常用方法:
set和get是类的常用方法
例:
public void setLength( double len )
{
length = len;
}
public double getLength()
{
return length;
}
静态成员:
static关键字把类成员定义为静态的,意味着类中只有一个该成员的实例。
静态变量用于定义常量,因为它们的值可以通过直接调用类而不需要创建类的实例来获取。
静态变量可在成员函数或类的定义外部进行初始化。你也可以在类的定义内部初始化静态变量。
你也可以把一个成员函数声明为 static。这样的函数只能访问静态变量。
例:public static int getNum() Console.WriteLine(&#34;变量 num: {0}&#34;, StaticVar.getNum());
【ToString】返回类的命名空间,可以重写
例:
public override string ToString()
{
return string.Format(&#34;id:{0},name:{1},Age:{2},Menpai{3},Kongfu:{4}&#34;,Id,Name,Age,Menpai,Kongfu,Level);
}
【Var】关键字
必须在定义时初始化。也就是必须是var s = “abcd”形式,而不能是如下形式: var s; s = “abcd”;
一但初始化完成,就不能再给变量赋与初始化值类型不同的值了。
var要求是局部变量。
使用var定义变量和object不同,它在效率上和使用强类型方式定义变量完全一样。
C#继承
【Inherit】继承
继承的思想实现了 属于(IS-A)关系。例:class Rectangle:Shape。
多重继承指的是一个类别可以同时从多于一个父类继承行为与特征的功能。
与单一继承相对,单一继承指一个类别只可以继承自一个父类。例:base.Display();
C#不支持多重继承。但可以通过接口实现。例:public interface PaintCost
一个类可以派生自多个类或接口,这意味着它可以从多个基类或接口继承数据和函数。
C#多态性
【Polymorphic】多态,一个接口多个功能。
多态性意味着有多重形式。
静态多态性:编译时发生函数响应。
C# 提供了两种技术来实现静态多态性。分别为:函数重载,运算符重载
动态多态性:运行时发生函数响应。
例:
void print(int i)
void print(double f)
【Abstract】04抽象类,动态多态性
C#允许您使用关键字 abstract 创建抽象类,用于提供接口的部分类的实现。
不能创建一个抽象类的实例。抽象方法只能在抽象类中定义。
不能在一个抽象类外部声明一个抽象方法。没有办法被调用,抽象方法永远不可能被实现。
当一个类被声明为 sealed 时,它不能被继承。抽象类不能被声明为 sealed。
abstract必须被子类重写。
PS://throw new NotImplementedException(); 未实现异常
【Virtual】03虚方法,动态多态性
即为基类中定义的允许在派生类中重写的方法,使用virtual关键字定义。
virtual修饰的方法必须有实现
virtual可以被子类重写,而abstract必须被子类重写。
【New】05覆盖,当用子类创建父类的时候,覆盖不会改变父类方法的功能。
在派生类中定义的和基类中的某个方法同名的方法,使用 new 关键字定义。
例:
父类:
public void Sleep()
{
Console.WriteLine(&#34;Animal Sleep&#34;);
}
子类:
public void Sleep()
{
Console.WriteLine(&#34;Cat Sleep&#34;);
}
PS : 虚方法、实方法都可以被覆盖(new),抽象方法,接口 不可以。
抽象方法,接口,标记为virtual的方法可以被重写(override),实方法不可以。
【Overload】01重载
在同一个作用域(一般指一个类)的两个或多个方法函数名相同,参数列表不同的方法叫做重载,它们有三个特点(俗称两必须一可以):
方法名必须相同
参数列表必须不相同
返回值类型可以不相同
例:
void print(int time)
Console.WriteLine(&#34;Animal{0}点睡觉&#34;, time);
void print(double time)
Console.WriteLine(&#34;Animal精确时间到{0}睡觉&#34;, time);
【Override】02重写,当用子类创建父类的时候,重写会改变父类方法的功能。
子类中为满足自己的需要来重复定义某个方法的不同实现,需要用 override 关键字,被重写的方法必须是虚方法,用的是 virtual 关键字。它的特点是(三个相同):
相同的方法名
相同的参数列表
相同的返回值
例:
父类:
public virtual void EatFood()
{
Console.WriteLine(&#34;Animal吃东西&#34;);
}
子类:
public override void EatFood()
{
Console.WriteLine(&#34;Cat吃东西&#34;);
//base.EatFood();
}
【operator】运算符重载
通过关键字 operator 后跟运算符的符号来定义的。
例:
public static Box operator+ (Box b, Box c)
{
Box box = new Box();
box.length = b.length + c.length;
box.breadth = b.breadth + c.breadth;
box.height = b.height + c.height;
return box;
}
【Sealed】密封类
通过在类定义前面放置关键字 sealed,可以将类声明为密封类。
C#静态
【Static】静态
静态类、静态成员、静态方法、静态构建函数
C#接口
【Interface】接口
接口定义了所有类继承接口时应遵循的语法合同。
接口定义了属性、方法和事件,都是接口的成员。接口只包含了成员的声明。成员的定义是派生类的责任。
通常接口命令以 I 字母开头。
如果一个接口继承其他接口,那么实现类或结构就需要实现所有接口的成员。
C#命名空间
【Namespace】命名空间
命名空间的设计目的是提供一种让一组名称与其他名称分隔开的方式。
命名空间定义:
namespace namespace_name
{
// 代码声明
}
using 关键字表明程序使用的是给定命名空间中的名称。引用命名空间
【Using】引入命名空间
常见用法:
using指令,引入命名空间 using System;
using static 指令,指定无需指定类型名称即可访问其静态成员的类型。
using static System.Math;var = PI; //直接使用System.Math.PI
起别名:using Project = PC.MyCompany.Project;
using语句:将实例与代码绑定
using (Font font3 = new Font(&#34;Arial&#34;, 10.0f),
font4 = new Font(&#34;Arial&#34;, 10.0f))
{
// Use font3 and font4.
}
代码段结束时,自动调用font3和font4的Dispose方法,释放实例。
C#预处理
【#define】允许您定义一个符号,这样,通过使用符号作为传递给 #if 指令的表达式,表达式将返回 true。
【#if】【#else】【#endif】
预处理器指令指导编译器在实际编译开始之前对信息进行预处理。
例:
#define PI
using System;
namespace PreprocessorDAppl
{
class Program
{
static void Main(string[] args)
{
#if (PI)
Console.WriteLine(&#34;PI is defined&#34;); //PI不存在,则这条语句不编译
#else
Console.WriteLine(&#34;PI is not defined&#34;); //PI存在,则这条语句不编译
#endif
Console.ReadKey();
}
}
}
【#error】它允许从代码的指定位置生成一个错误。
【#warning】它允许从代码的指定位置生成一级警告。
当编译器遇到它们时,会分别产生警告或错误。如果编译器遇到 #warning 指令,会给用户显示 #warning 指令后面的文本,之后编译继续进行。如果编译器遇到 #error 指令,就会给用户显示后面的文本,作为一条编译错误消息,然后会立即退出编译。
例:
#if DEBUG && RELEASE
#error &#34;You&#39;ve defined DEBUG and RELEASE simultaneously!&#34;
#endif
#warning &#34;Don&#39;t forget to remove this line before the boss tests the code!&#34;
Console.WriteLine(&#34;*I hate this job.*&#34;);
【#region】它可以让您在使用 Visual Studio Code Editor 的大纲特性时,指定一个可展开或折叠的代码块。
【#endregion】它标识着 #region 块的结束。
例:
#region Member Field Declarations
int x;
double d;
Currency balance;
#endregion
【#line】指令可以用于改变编译器在警告和错误信息中显示的文件名和行号信息,不常用。
例:#line default // 恢复默认行号
【#pragma】指令可以抑制或还原指定的编译警告。
#pragma warning disable 169 // 取消编号 169 的警告(字段未使用的警告)
#pragma warning restore 169 // 恢复编号 169 的警告
C#正则表达式
【Regex】【@】检索,匹配。
定位元字符:
\b 匹配单词的开始或结束
\B 匹配非单词的开始或结束
^ 匹配必须出现在字符串的开头或行的开头
$ 匹配必须出现在以下位置:字符串结尾、字符串结尾处的 \n 之前或行的结尾。
\A 指定匹配必须出现在字符串的开头(忽略 Multiline 选项)。
\z 指定匹配必须出现在字符串的结尾(忽略 Multiline 选项)。
\z 指定匹配必须出现在字符串的结尾或字符串结尾处的 \n 之前(忽略 Multiline 选项)。
\G 指定匹配必须出现在上一个匹配结束的地方。
与 Match.NextMatch() 一起使用时,此断言确保所有匹配都是连续的。
基础语法元字符:
. 匹配除换行符以外的任意字符
\w 匹配字母、数字、下划线、汉字 (指大小写字母、0-9的数字、下划线_)
\W \w的补集 ( 除“大小写字母、0-9的数字、下划线_”之外)
\s 匹配任意空白符 (包括换行符/n、回车符/r、制表符/t、垂直制表符/v、换页符/f)
\S \s的补集 (除\s定义的字符之外)
\d 匹配数字 (0-9数字)
\D 表示\d的补集 (除0-9数字之外)
反义字符:
\W \w的补集 ( 除“大小写字母、0-9的数字、下划线_”之外)
\S \s的补集 (除\s定义的字符之外)
\D 表示\d的补集 (除0-9数字之外)
\B 匹配不是单词开头或结束的位置
[ab] 匹配中括号中的字符
[a-c] a字符到c字符之间是字符
[^x] 匹配除了x以外的任意字符
[^adwz] 匹配除了adwz这几个字符以外的任意字符
重复描述:
{n} 匹配前面的字符n次
{n,} 匹配前面的字符n次或多于n次
{n,m} 匹配前面的字符n到m次
? 重复零次或一次
+ 重复一次或更多次
* 重复零次或更多次
择一匹配:
| 将两个匹配条件进行逻辑“或”(Or)运算。
分组:
用小括号来指定子表达式(也叫做分组)
重复多个字符使用(abcd){n}进行分组限定
【IsMatch】静态方法,匹配判断
返回值是一个布尔类型,用于判断指定的字符串是否与正则表达式字符串匹配,它有三个重载方法
基础结构:
bool IsMatch(string input, string pattern, RegexOptions options, TimeSpan matchTimeout);
input 要搜索匹配项的字符串。
pattern 要匹配的正则表达式模式。
options 枚举值的一个按位组合,这些枚举值提供匹配选项。
matchTimeout 超时间隔,
或System.Text.RegularExpressions.Regex.InfiniteMatchTimeout 指示该方法不应超时。
返回结果: 如果正则表达式找到匹配项,则为 true;否则,为 false。
匹配选项:
RegexOptions 枚举值 内联标志 简单说明
ExplicitCapture n 只有定义了命名或编号的组才捕获
IgnoreCase i 不区分大小写
IgnorePatternWhitespace x 消除模式中的非转义空白并启用由 # 标记的注释。
MultiLine m 多行模式,其原理是修改了^和$的含义
SingleLine s 单行模式,和MultiLine相对应
【Match】静态方法,匹配返回第一个
使用指定的匹配选项在输入字符串中搜索指定的正则表达式的第一个匹配项。
返回一个包含有关匹配的信息的对象。
Match Match(string input, string pattern, RegexOptions options, TimeSpan matchTimeout);
【Matches】静态方法,匹配返回所有
在指定的输入字符串中搜索指定的正则表达式的所有匹配项。
返回的是所有匹配项。
MatchCollection Matches(string input, string pattern, RegexOptions options, TimeSpan matchTimeout);
【Replaces】静态方法,替换
Replace(string input,string pattern,string replacement,RegexOptions options)
【Split】静态方法,拆分
string[] Split(string input, string pattern, RegexOptions options, TimeSpan matchTimeout);
C#异常处理
【error】错误
【try】【catch】【finally】【throw】
基本结构:
try
{
// 引起异常的语句
}
catch( ExceptionName e1 )
{
// 错误处理代码
Throw e1
// 抛出异常
}
finally
{
// 要执行的语句
}
System.ApplicationException 和 System.SystemException 类是派生于 System.Exception 类的异常类。
System.ApplicationException 类支持由应用程序生成的异常。
System.SystemException 类是所有预定义的系统异常的基类。
下表列出了一些派生自 Sytem.SystemException 类的预定义的异常类:
System.IO.IOException 处理 I/O 错误。
System.IndexOutOfRangeException 处理当方法指向超出范围的数组索引时生成的错误。
System.ArrayTypeMismatchException 处理当数组类型不匹配时生成的错误。
System.NullReferenceException 处理当依从一个空对象时生成的错误。
System.DivideByZeroException 处理当除以零时生成的错误。
System.InvalidCastException 处理在类型转换期间生成的错误。
System.OutOfMemoryException 处理空闲内存不足生成的错误。
System.StackOverflowException 处理栈溢出生成的错误。
C#文件的输入与输出
1. 通过FileInfo和DirectoryInfo类来读取文件和文件夹属性
查看文件属性,创建文件,移动文件,重命名文件
判断路径是否存在,创建目录
2. 通过File读写文件
读写文件
3. 使用流来读写文件
FileStream
StreamReader(读取流-读取数据) StreamWriter(写入流-向别人传输)
【DriveInfo】提供磁盘信息
【Path】对路径信息进行操作。Path类提供了一些静态方法,可以更容易的对路径名执行操作。
方法实例:
string dirPath = @&#34;D:\TestDir&#34;;
string filePath = @&#34;D:\TestDir\TestFile.txt&#34;;
Console.WriteLine(Environment.CurrentDirectory); //获得当前路径
Path.GetDirectoryName (file Path) //文件或文件夹所在目录
Path.GetExtension(filePath) //文件扩展名
Path.GetFileName(filePath) //文件名
Path.GetFullPath(filePath) //绝对路径
Path.ChangeExtension(filePath, &#34;.jpg&#34;) //更改扩展名
Path.GetPathRoot(dirPath) //根目录
Path.Combine(new string[] { @&#34;D:\&#34;, &#34;BaseDir&#34;, &#34;SubDir&#34;, &#34;TestFile.txt&#34; }) //生成路径
Path.Combine 连接两个路径,不用关心在哪个系统上。
Path.AltDirectorySeparatorChar 提供分割目录的字符,在windows上使用 \ 在Unix上用 /
【DirectoryInfo】用于对目录执行操作
DirectoryInfo 类派生自 FileSystemInfo 类。它提供了各种用于创建、移动、浏览目录和子目录的方法。
该类不能被继承。
属性:
Attributes 获取当前文件或目录的属性。
CreationTime 获取当前文件或目录的创建时间。
Exists 获取一个表示目录是否存在的布尔值。
Extension 获取表示文件存在的字符串。
FullName 获取目录或文件的完整路径。
LastAccessTime 获取当前文件或目录最后被访问的时间。
Name 获取该 DirectoryInfo 实例的名称。
方法:
public void Create() 创建一个目录。
public DirectoryInfo CreateSubdirectory( string path )
在指定的路径上创建子目录。指定的路径可以是相对于 DirectoryInfo 类的实例的路径。
public override void Delete() 如果为空的,则删除该 DirectoryInfo。
public DirectoryInfo[] GetDirectories() 返回当前目录的子目录。
public FileInfo[] GetFiles() 从当前目录返回文件列表。
【FileInfo】用于对文件执行操作
FileInfo 类派生自 FileSystemInfo 类。它提供了用于创建、复制、删除、移动、打开文件的属性和方法, 且有助于 FileStream 对象的创建。该类不能被继承。
属性:
Attributes 获取当前文件的属性。
CreationTime 获取当前文件的创建时间。
Directory 获取文件所属目录的一个实例。
Exists 获取一个表示文件是否存在的布尔值。
Extension 获取表示文件存在的字符串。
FullName 获取文件的完整路径。
LastAccessTime 获取当前文件最后被访问的时间。
LastWriteTime 获取文件最后被写入的时间。
Length 获取当前文件的大小,以字节为单位。
Name 获取文件的名称。
方法:
public StreamWriter AppendText()
创建一个 StreamWriter,追加文本到由 FileInfo 的实例表示的文件中。
public FileStream Create() 创建一个文件。
public override void Delete() 永久删除一个文件。
public void MoveTo( string destFileName )
移动一个指定的文件到一个新的位置,提供选项来指定新的文件名。
public FileStream Open( FileMode mode ) 以指定的模式打开一个文件。
public FileStream Open( FileMode mode, FileAccess access )
以指定的模式,使用 read、write 或 read/write 访问,来打开一个文件。
public FileStream Open( FileMode mode, FileAccess access, FileShare share )
以指定的模式,使用 read、write 或 read/write 访问,以及指定的分享选项,来打开一个文件。
public FileStream OpenRead() 创建一个只读的 FileStream。
public FileStream OpenWrite() 创建一个只写的 FileStream。
实例:
// 创建一个 DirectoryInfo 对象
DirectoryInfo mydir = new DirectoryInfo(@&#34;c:\Windows&#34;);
// 获取目录中的文件以及它们的名称和大小
FileInfo [] f = mydir.GetFiles();
foreach (FileInfo file in f)
{
Console.WriteLine(&#34;File Name: {0} Size: {1}&#34;,
file.Name, file.Length);
}
Console.ReadKey();
【Directory】有助于操作目录结构,Directory类只包含静态方法
【File】有助于处理文件,File只包含静态方法
如果只对文件夹或文件执行一个操作,使用这些类就很有效,省去了去实例化.NET类的系统开销。
【FileStream】用于文件中任何位置的读写
http://System.IO 命名空间中的 FileStream 类有助于文件的读写与关闭。该类派生自抽象类 Stream。
基础语法:
FileStream <object_name> = new FileStream( <file_name>,<FileMode Enumerator>,
<FileAccess Enumerator>, <FileShare Enumerator>);
FileMode:打开方式
FileMode.Append:打开一个已有的文件,并将光标放置在文件的末尾。如果文件不存在,则创建文件。
FileMode.Create:创建一个新的文件。如果文件已存在,则删除旧文件,然后创建新文件。
FileMode.CreateNew:指定操作系统应创建一个新的文件。如果文件已存在,则抛出异常。
FileMode.Open:打开一个已有的文件。如果文件不存在,则抛出异常。
FileMode.OpenOrCreate:指定操作系统应打开一个已有的文件。
如果文件不存在,则用指定的名称创建一个新的文件打开。
FileMode.Truncate:打开一个已有的文件,文件一旦打开,就将被截断为零字节大小。
然后我们可以向文件写入全新的数据,但是保留文件的初始创建日期。如果文件不存在,则抛出异常。
FileAccess:文件通路
FileAccess 枚举的成员有:Read、ReadWrite 和 Write。
FileShare:权限设置
FileShare.Inheritable:允许文件句柄可由子进程继承。Win32 不直接支持此功能。
FileShare.None:谢绝共享当前文件。
FileShare.Read:允许随后打开文件读取。
FileShare.ReadWrite:允许随后打开文件读取或写入。
FileShare.Write:允许随后打开文件写入。
FileShare.Delete:允许随后删除文件
【StreamReader】用于从字节流中读取字符
读写文件几种形式:
创建文本的读取流(会检查字节码标记确定编码格式)
StreamReader sr = new StreamReader(@&#34;c:\xx\ReadMe.txt&#34;);
指定编码格式
StreamReader str = new StreamReader(@&#34;c:\xx\xx.txt&#34;,Encoding.UTF8);
(可取的编码格式 ASCII Unicode UTF7 UTF8 UTF32)
在文件流的基础上创建文本读取流
FileStream fs = new FileStream(@&#34;c:\xx\xx.txt&#34;,FileMode.Open,FileAccess.Read,FileShare.None);
StreamReader sr = new StreamReader(fs);
通过文件信息创建文本读取流-第二种方式
FileInfo myFile = new FileInfo(@&#34;c:\xx\xx.txt&#34;);
StreamReader sr = myFile.OpenText();
流的关闭 sr.Close();
读取文件几种形式:
string nextLine = sr.ReadLine();//读取一行字符串
string restOfStream = sr.ReadToEnd();//读取流中所有剩余的文本内容
int nextChar = sr.Read();//只读取一个字符
int nChars = 100;
char[] charArray = new char[nChars];
int nCharsRead = sr.Read(charArray,0,nChars); 读取多个字符,第一个参数是要存放的字符数组,
第二个参数是从数组哪一个索引开始放,第三个参数是读取多少个字符 返回值是实际读取的字符的个数
【StreamWriter】用于向一个流中写入字符
【StringReader】用于读取字符串缓冲区
【StringWriter】用于写入字符串缓冲区
【BinaryReader】从二进制流读取原始数据
【BinaryWriter】以二进制格式写入原始数据
【BufferedStream】字节流的临时存储
【MemoryStream】用于随机访问存储在内存中的数据流
C#高级
C#特性
【Conditional】【Obsolete】【DebuggerStepThrough】
【Attribute】是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明 性标签。您可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所应用的元素前面 的方括号([ ])来描述的。
预定义特性:
Conditional:这个预定义特性标记了一个条件方法,其执行依赖于指定的预处理标识符。
例:
#define DEBUG //定义DEBUG
public class Myclass
{
[Conditional(&#34;DEBUG&#34;)] //如果没有定义DEBUG,则方法语句不运行
public static void Message(string msg)
{
Console.WriteLine(msg);
}
}
Obsolete:这个预定义特性标记不应被使用的程序实体。它可以让您通知编译器丢弃某个特定的目标元素。
例:
[Obsolete(&#34;Don&#39;t use OldMethod, use NewMethod instead&#34;, true)]
static void OldMethod()
{
Console.WriteLine(&#34;It is the old method&#34;);
}
//当尝试编译时,编译器会给出一个错误消息说明,如上。
AttributeUsage:
语法如下:
[AttributeUsage(
validon, //规定特性可被放置的语言元素,枚举类型。
AllowMultiple=allowmultiple, //提供一个布尔值。如果为 true,则该特性是多用的。默认false。
Inherited=inherited //提供一个布尔值。如果为 true,则该特性可被派生类继承。默认false。
)]
创建自定义特性
声明自定义特性:AttributeUsage
构建自定义特性:创建一个类继承 System.Attribute
应用自定义特性:
其他特性:
调用者信息特性
调用者信息特性可以访问文件路径,代码行数,调用成员的名称等源代码信息。
这个三个特性名称为CallerFilePath,CallerLineNumber和CallerMemberName
这些特性只能用于方法中的可选参数
public static void PrintOut(string message,[CallerFilePath] string filename=&#34;&#34;,[CallerLineNumber]int lineNumber = 0,[CallerMemberName]string callingMember=&#34;&#34;){
Console.WriteLine(&#34;Message:&#34;+message);
Console.WriteLine(&#34;Line :&#34;+lineNumber);
Console.WriteLine(&#34;Called from:&#34;+callingMember);
Console.WriteLine(&#34;Message :&#34;+message);
}
DebuggerStepThrough 知道某些方法不可能出错,用以跳过调试
C#反射
【Reflection】反射
反射指程序可以访问、检测和修改它本身状态或行为的一种能力。
程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。
您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。
然后,可以调用类型的方法或访问其字段和属性。
获取Type对象有两种方式:
Type t = myInstance.GetType();//通过类的实例来获取Type对象
在object类有一个GetType的方法,返回Type对象,因为所有类都是从object继承的,
所以我们可以在任何类型上使用GetType()来获取它的Type对象
Type t = typeof(ClassName);//直接通过typeof运算符和类名获取Type对象获取里面的属性。
Assembly类:Assembly类在System.Reflection命名空间中定义,它允许访问给定程序集的元数据,
它也包含了可以加载和执行程序集。
C#属性,索引
【Accessor】访问器包含一个 get 访问器或一个 set 访问器。
【Indexer】访问器包含一个 get 访问器或一个 set 访问器。索引器返回或设置对象实例的一个特定值。带有this关键字,它指向对象实例。
C#委托
【Delegate】委托(Delegate)特别用于实现事件和回调方法。即可用静态方法,也可用普通方法。
定义一个委托相当于定义一个新类,所有可以定义类的地方都可以定义委托。
使用委托来调用对象方法。委托的多播使用,方法也可以调用委托
声明语法:delegate <return type> <delegate-name> <parameter list>
例:
delegate int NumberChanger(int n);//声明委托
class......
public static int AddNum(int p)
{
num += p;
return num;
}
main......
NumberChanger nc1 = new NumberChanger(AddNum); // 创建委托实例
nc1(25); // 使用委托对象调用方法
【Func】内置的委托类型
引用了一个带有一个返回值的方法,它可以传递0或者多到16个参数类型,和一个返回类型。
【Action】内置的委托类型
委托引用了一个void返回类型的方法,它可以传递0或者多到16个参数类型。
指向带一个int参数的方法:Action<int> a = PrintString
【Generic】泛型
C#匿名方法
【Anonymous methods】匿名方法,一般使用匿名方法进行回调。
本质上是一个方法,只是没有名字,任何使用委托变量的地方都可以使用匿名方法赋值。
例:
static int Test1(int arg1, int arg2)
{
return arg1 + arg2;
}
Func<int,int,int>plus = Test1;
改为:
Func<int,int,int>plus = delegate(int arg1,int arg2)
{
return arg1 +arg2;
}
【Lambda】Lambda表达式,用来代替匿名方法。
lambda表达式的参数不需要声明类型
Func<int,int,int>plus = (arg1,arg2)=>
{
return arg1 +arg2;
}
C#事件
【Event】事件
委托能声明一个局部变量,事件只能在类里面声明
例:
public delegate void MyDelegate();
public event MyDelegate mydelgate;//声明了一个委托类型的变量,作为类的成员。加上event
static void Main(string[] args)
{
Program p = new Program();
p.mydelgate = Test1;
p.mydelgate();
Console.ReadKey();
}
观察者设计模式,被观察者设置一个委托(事件),观察者为委托注册自身方法
委托与事件的区别,事件不能在的外部触发,只能在类的内部。受限制的委托
发布订阅机制:
发布器:
声明事件
在方法调用事件
订阅器:
设置一个方法
注册方法(为方法添加事件)
触发:
实例化对象发布器和订阅器
调用发布器方法,订阅器也会跟着做出反应。
【LINQ】查询代码
基础方法:
from...in...查询的集合
where 查询的条件
select 结果集合返回
扩展方法:
var res = masterList.Where()//传递一个方法作为过滤,或者直接在里面写lambad表达式
联合查询:
from A in AA from B in BB
where A.? = B.?
select new{输出项}
------
from A in AA join B in BB
on A.? equals B.?
select new{输出项}
var res = masterList.SelectMany(m=>kongfuList,(m,k)=>new {master = m,kongfu = k})
.Where(x=>x.master.kongfu==x.kongfu.Name &&x.kongfu.Power>90);
结果排序:
orderby m.age,mLeverl descending
var res = masterList.Where(m => m.level > 8&&m.Menpai == &#34;丐帮&#34;).OrderBy(m => m.Age);
分组查询:
var res = from k in konfuList join m in masterList on k.Name equals m.Kongfu
into groups
select new {kongfu =k, count = groups.Count(),key=g.key};
量词操作:
bool res = masterList.Any(m => m.Menpai == &#34;长留&#34;)//只要一个条件符合返回true
【Json】存储和交换文本信息的语法。
using LitJson;
JsonData jsonData = JsonMapper.ToObject(File.ReadAllText(&#34;json技能信息.txt&#34;));
//jsonMapper去解析json文本
//jsondata对象代表一个数组或者一个对象
foreach(JsonData temp in jsonData)//在这里temp代表一个对象
{
JsonData idvalue = temp[&#34;id&#34;];//通过字符串索引器可以取得键值对的值
}
一般会创建对象处理
calss Skill
{
public int id;
public override string ToString(){}
}
List<Skill> skillList = new List<Skill>();
foreach(JsonData temp in jsonData)
{
Skill skill = new Skill();
skill.id = id
skillList.Add(skill);
}
foreach(var temp in skillList)
{
输出
}
简单解析方式:
Skill[] skillArray=JsonMapper.ToObject<Skill[]>(File.ReadAllText(&#34;json技能信息.txt&#34;));
//利用泛型解析时,json里面对象的键必须跟定义类的属性保持对呀
Lisk<Skill> skillList=JsonMapper.ToObject<List<Skill>>(File.ReadAllText(&#34;json技能信息.txt&#34;));
转化成Json:
string json =JsonMapper.ToJson(p);
U3D基础
U3D界面
【File】文件、文件菜单
文件菜单:New Scene新建场景、New Project新建项目、Build Settings...发布设置
【Edit】编辑、编辑菜单
编辑菜单:Undo撤销、Redo重复、Cut剪切、Copy复制、Paste粘贴、Duplicate拷贝、Delete删除、Frame Selected将镜头移到选择物体前、Lock View to Selected 锁定视图选择、Preferences...首选参数设置、Modules...模板载入选择、Project Settings项目设置
PS:Project Settings内有输入键设置
【Assets】资源,资源菜单,资源文件夹,资源管理界面
资源菜单:Create创建物体、show in Explorer在资源管理器中查看、Import New Asset导入新的资源
资源文件夹:Audios音效、Material材质、Prefabs预制、Scenes场景、Scripts脚本、Sprites精灵
【GameObject】游戏对象、游戏对象菜单
游戏对象菜单:Create创建物体、show in Explorer在资源管理器中查看、Import New Asset导入新的资源
【Component】组件、组件菜单
组件菜单:Mesh网格、Effects效果、Physics物理、Phusics 2D二维物理、Navigation导航、Audio音频、Video视频、Rendering渲染、Tilemap地图、Layout布局、Playables人模、Miscellaneous杂项、Ui界面
【Window】窗口、窗口菜单
窗口菜单:Layouts布局、Scene场景、Game游戏、Inspector检视、Hierarchy层次、Project工程、Animation动画、Audio Mixer音效混合器、Animator动画控制器、Sprite Packer精灵打包器
【Help】帮助、帮助菜单
帮助菜单:Unity Manual 帮助手册、Scripting Reference脚本手册
【Hierarchy】层级视图界面
U3D基本步骤:
开始界面/登录
创建新项目File/new project
创建新场景File/new scene
新建文件夹assets/scenes用来保存场景File/save scene
添加游戏对象 GameObject/Create(主要摄影机Main Camera,平行光Directional Light,游戏物体)
U3D层次关系:Project项目 > Scene场景 > GameObject游戏物体 > Inspector组件
【Scene】场景设计界面
基本部件:摄像机位置、光照位置
视图类型:perso透视视野/近大远小 iso平行视野
操作快捷键:
鼠标移动(上下左右移动视角) 鼠标滑轮/alt(缩放视角) 鼠标左键双击/f(聚焦)
鼠标右键 (旋转视角) alt+鼠标左键(视角围绕物体旋转)
【Game】游戏运行界面
【Project】项目管理界面
【Console_1】控制台界面
【Inspector】检视属性界面
【Scene】场景设计界面
【Game】游戏运行界面
【Layout】布局设置
布局设置:2by3二横显示三竖资源、4Split四轴、Default默认、Tall竖着排、Wide横着排、Revert Factory Settings...恢复出厂设置 |
|