命名空间
namespace 可以看做是一个文件夹
- 一个文件中可以存在多个命名空间
- 命名空间中可以再嵌套命名空间
- 命名空间的取名规范依照标识符的取名规范
using(使用程序引用集) 后面其实也是命名空间 (系统写好的命名空间)
using System;
using System.Collections.Generic; //嵌套的命名空间
using UnityEngine;
C#语言是一门完全面向对象的语言 (在面向过程中Main函数是主函数,也是程序的入口)
第一个函数
Console.WriteLine("Hello World!"); //输出Hello World!
输入函数 (同时也是阻塞函数 执行到这里就等待用户输入)
Console.Read();
数据类型的分类:
- 引用类型:数组、字符串、类类型、接口、委托(事件)
- 值类型:数值类型、字符类型、结构体、枚举、Boolean类型
值类型:
1.数值类型:
(1)整数类型:按照字节大小来划分 1byte = 8bit
一个字节 | byte(无符号) | sbyte(有符号) |
两个字节 | short(有符号) | ushirt(无符号) |
四个字节 | int(有符号) | uint(无符号) |
八个字节 | long(有符号) | ulong(无符号) |
(2)浮点类型:通过减法进行浮点数的判断 差值小于0.001近似相等
单精度浮点数(没有符号类型) | 四字节 | float ( float float_number = 3.14f ) |
双精度浮点数: |
八字节 | double(double double_number = 3.14 || double double_number = 3.14d ) |
完全精确的小数类型 |
十六字节 | decimal (先将数据类型转换为字符传进行存储 使用时再转换为数值类型) |
2.字符类型:
char 两字节。
1.char赋值的数据是用 ' ' 括起来的(使用单引号'A')
2. ' ' 中括起来的数据不仅仅只有1位数据 ( 'NUT' )
3.char类型可以跟整数类型之间进行转换 ASCII码
4.字符串类型中的每一个元素都是char类型(字符串类型可以看成是一个字符数组)
3.结构体:
struct(结构体关键字) 结构体名字 {属性;属性……;构造函数;方法}
4.枚举:
enum(枚举关键字) 枚举的名字 {内容1,内容2....};
5.Boonlean类型:
bool 一个字节(true和false)
在C#中0和1不能代表true和false
数据类型之间的转换:
1.数值类型之间的转换
隐式转换:没有进行强制类型转;将储存范围小的转换为储存范围大的。
显示转换:将储存范围大的转换为储存范围小的,如果转换的数值需要的储存空间大于数据类型的储存空间,转换不准确。
2.字符串转换为数值类型
前提:字符串内只能是一个具体的数值,不能包括其他的字符,首位空格除外。
type.Parse(string)
Conver.To...(string)
3.枚举转换为数值类型
显示转换:type num = (type)枚举类.内容
值传递和引用传递
值类型:数值 布尔 字符 枚举 结构体...
引用类型:类 数组 字符串 接口 委托(事件)...
值传递:将变量的值复制一份到函数值进行操作
引用传递:将变量本身传递到函数中
在函数间传递值类型的参数时,如果需要对实参中的数据作出改变的话,就得加上ref关键字,将值传递变为引用传递
函数:特定功能块
返回值 函数名(参数列表){函数体}
当一个函数不需要返回值的时候为void,如果需要返回值的用对应的类型
一个简单的输出函数
int a = 666;
print(a); //666
void print(int a)
{
Console.WriteLine(a);
}
函数的参数:ref out params 默认参数
ref:reference 引用
out:让一个函数拥有多个返回值
- ref和out修饰的参数,在实际调用的时候,需要在对应的实参前把对应的关键字加上
- ref关键字修饰的参数,实参传递之前必须先初始化好
- out关键字修饰的参数,在函数返回之前对out修饰的参数进行赋值。
- params修饰的参数可以实现一个不定长度的参数列表出来
- params修饰的参数一定是放到参数列表的末尾
- 默认参数在具体使用的时候可以不用给实参,但是不传递实参的时候将会用这个参数默认给的值
- 默认参数必须放到所有非默认参数后
这是一个简单的交换数值代码
int num1 = 5;
int num2 = 3;
int num3 = num1;
num1 = num2;
num2 = mum3;
Console.WriteLine(num1); //3
Console.WriteLine(num2); //5
写成函数如下
int num1 = 5;
int num2 = 3;
Swap(num1,num2);
Console.WriteLine(num1); //5
Console.WriteLine(num2); //3
void Swap(int num1,int num2)
{
int num3 = num1;
num1 = num2;
num2 = mum3;
}
实际上输出的还是5 和 3;并没有发生交换
因为函数的形参和实参的传递实际上是值传递 相当于函数新创建的两个变量分别接受了外界调用所传的值 交换实际上只是函数内两个变量的交换