C#基本语法学习笔记(C++基础)第一部分

C#基本语法学习笔记(C++基础)第一部分

本篇文章是针对于有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可能会出现如下警告

null警告

这是由于高版本的.NET开启了null检查所致

解决方案两种

//1.允许str为空
string? str = Console.ReadLine();
//2.为str2设置默认值
string str2 = string.Empty;

2.类型与进制

类型描述范围默认值
bool布尔值True 或 FalseFalse
byte8 位无符号整数0 到 2550
char16 位 Unicode 字符U +0000 到 U +ffff‘\0’
decimal128 位精确的十进制值,28-29 有效位数(-7.9 x 1028 到 7.9 x 1028) / 100 到 280.0M
double64 位双精度浮点型(+/-)5.0 x 10-324 到 (+/-)1.7 x 103080.0D
float32 位单精度浮点型-3.4 x 1038 到 + 3.4 x 10380.0F
int32 位有符号整数类型-2,147,483,648 到 2,147,483,6470
long64 位有符号整数类型-9,223,372,036,854,775,808 到 9,223,372,036,854,775,8070L
sbyte8 位有符号整数类型-128 到 1270
short16 位有符号整数类型-32,768 到 32,7670
uint32 位无符号整数类型0 到 4,294,967,2950
ulong64 位无符号整数类型0 到 18,446,744,073,709,551,6150
ushort16 位无符号整数类型0 到 65,5350

了解

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

默认和项目同名,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++基础的同学总结而来,节省部分时间,同时也作为本人的学习笔记。如有错误或不足之处还请联系我指出进行修改,文章内容存在部分本人自我理解,具体标准内容请以官方文档为准。

第二部分笔记内容即将整理发布,发布后将在文章末尾附上链接

第二部分已发布

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 共1条

请登录后发表评论