本篇文章是针对于有C++基础的同学对C#的快速了解即入门,不适合零基础的小伙伴
1.C#基本格式-输入输出语句
对应的c++中的cin与cout语句的分别是
using System;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
int a = 1;
//输出语句类似于cout
Console.WriteLine("hello world!");
//可以使用+号进行拼接
Console.WriteLine("hello" + " " + "C#");
//不带自动换行的版本
Console.Write("你好");
//也可以类似于prinf的格式进行使用{0}
Console.WriteLine("a的数字是{0}", a);
//int输入语句
int Int = Console.Read();
//string输入语句
string str = Console.ReadLine();
}
}
}
当C#控制台程序运行过程中,由于使用的.NET版本不同,可能会出现控制台一闪而过的场景,临时解决方案和C语言类似
就是在程序Main的最后方添加
Console.ReadKey();
如果你是用的VS studio2022则只能使用较高版本的.NET可能会出现如下警告
这是由于高版本的.NET开启了null检查所致
解决方案两种
//1.允许str为空
string? str = Console.ReadLine();
//2.为str2设置默认值
string str2 = string.Empty;
2.类型与进制
类型 | 描述 | 范围 | 默认值 |
---|---|---|---|
bool | 布尔值 | True 或 False | False |
byte | 8 位无符号整数 | 0 到 255 | 0 |
char | 16 位 Unicode 字符 | U +0000 到 U +ffff | ‘\0’ |
decimal | 128 位精确的十进制值,28-29 有效位数 | (-7.9 x 1028 到 7.9 x 1028) / 100 到 28 | 0.0M |
double | 64 位双精度浮点型 | (+/-)5.0 x 10-324 到 (+/-)1.7 x 10308 | 0.0D |
float | 32 位单精度浮点型 | -3.4 x 1038 到 + 3.4 x 1038 | 0.0F |
int | 32 位有符号整数类型 | -2,147,483,648 到 2,147,483,647 | 0 |
long | 64 位有符号整数类型 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | 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 |
了解
3.数组
1.一维数组
1.变量声明
int[] ages
float[] sorces
string[] names
2.初始化
//数组元素为默认值
int[] intArray = new int[6]
//带初始值的初始化
int[] intArray = new int[3]{1,2,3};
int[] intArray = new int[]{1,2,3};
int[] intArray = new[]{1,2,3};
//直接初始化
int[] myArr = {1,2,3,4,5};
3.访问
使用数组下标访问,序号从0开始
//数组长度
a.Length
2.数据类型
两类:值类型、引用类型
简单解释,值类型即直接存储数据值
引用类型则是存储指针,指针指向堆中的数据值(当然C#语法中不存在指针这一概念,只是辅助理解记忆)
附上图理解记忆
值类型:int,bool…枚举,结构体
引用类型:字符串,数组
栈和堆的区别请自行必应
3.二维数组-数组的数组
//初始化方式,两者均可
int[,] array = new int[2,3]{{1,2,3},{1,2,3}};
int[,] map = new int[,]{{1,2,3},{1,2,3}};
4.运算符(和C++大差不差,故略)
算术运算符,逻辑运算符,三目运算符
5.类型转换
1.隐式转换,强制转换
1.隐式转换
简单解释:
如果复制过程中,存储空间由小到大,则系统自动进行隐式转换,因为不涉及不安全因素,即数据溢出等问题
例:
byte a = 1;
//自动进行隐式转换
int b = a;
2.强制转换
发生在存储空间由大到小的赋值过程中,存在不安全因素,系统不会自动进行, 以损失精度为代价
//方法1
double d = 3.4;
int a = (int)d;
//方法2
a = Convert.ToInt32(d);
2.装箱与拆箱
装箱和拆箱的过程就是值类型和引用类型的转换,是值类型与引用类型之间的桥梁
并且只有值类型才存在装箱和拆箱
装箱时隐式的,在装箱过程中不需要指定数据类型,
而拆箱是显式的,则需要我们告诉C#拆除来的数据是什么类型
int i = 3;
//装箱过程
object o = i;
//拆箱过程
int b = (int)o;
6.分支(略)
顺序结构,分支结构,循环结构
7.循环(略)
for循环,while循环,do while循环
8.函数
程序入口格式
using System;//命名空间
namespace ConsoleApp2
{
class Program
{
//主函数
static void Main(string[] args)
{
//函数体
}
//函数
static void test()
{
//函数体
}
}
}
递归(略)
9.结构体与枚举
1.枚举
using System;
namespace ConsoleApp2
{
//枚举定义 enum 关键字,PlayerState为名称
enum PlayerState
{
idle,//枚举量
run,
arrack,
die
}
class Program
{
static void Main(string[] args)
{
//变量声明,因为是枚举类型所以只能选择指定的枚举量
PlayerState state = PlayerState.run;
}
}
}
2.结构体
C#中,结构体为值类型,上面提到过忘记的请转到 数组-数据类型 章节中
结构体优点,用处请自行bing
结构体定义
struct Student
{
//姓名
public string name;
//年龄
publi int age;
//分数
public float score;
}
使用
Student xiaoLi;
xiaoLi.name = "小李";
xiaoLi.age = "22";
xiaoLi.score = "97.5";
10.类与对象
1.class类
class Person
{
public string name;
public int age;
public void chat()
{
}
}
和C++区别不大,但是我试了下似乎不能用C++的方式写访问修饰符
即
class Person
{
public:
string name;
int age;
void chat();
}
上述形式在C#中不可用
2.在vs2022中添加类
右键项目名称-添加-类
11.命名空间namespace xxx
即namespace部分
默认和项目同名,namespace后面名称空间相同,则他们可以直接互相引用,不需要包含
若,命名空间不同,例:
这个类的命名空间为Li空间
那么在主函数的ConsoleApp2的空间中则无法访问到,需要在主函数中添加
using Li;
12.ref引用,out返回值
1.ref
ref相当于C++语言中的引用数据类型,即起别名,是指针的简化版。
ref使用类似于int &a;位置不同,稍加注意即可。
using System;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
int a = 1;
Add(ref a);
Console.WriteLine(a);
}
static void Add(ref int a)
{
a++;
}
}
}
2.out返回值
out可以类似于return,使函数可以返回多个值
using System;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
int a = 1;
int b;//out类型的b在声明时不需要赋初值
Add(ref a,out b);
Console.WriteLine(a);
}
static int Add(ref int a,out int b)
{
a++;
b = a + 10;//在函数结束之前,必须且只能对b进行赋值操作,不能进行计算。
return a;
}
}
}
未完待续。。。
文章内容是根据书籍《新印象 Unity 2020游戏开发基础与实战》随书附赠的C#入门讲解视频对于存在C++基础的同学总结而来,节省部分时间,同时也作为本人的学习笔记。如有错误或不足之处还请联系我指出进行修改,文章内容存在部分本人自我理解,具体标准内容请以官方文档为准。
第二部分笔记内容即将整理发布,发布后将在文章末尾附上链接
第二部分已发布
- 本博客所拥有的文章除特别声明外,均默认采用 CC BY 4.0 许可协议。
- 文章部分内容可能来源于公共网络,如有侵权,请联系博主在核实后进行修改或删除。
- 最新
- 最热
只看作者