C#基础语法知识

简介: C#基础语法知识

复杂数据类型

1.概述

普通数据类型:

无符号变量:byte、ushort、uint、ulong

有符号变量:sbyte、short、int、long

浮点数:float、double、decimal

特殊类型:bool、char、string

复杂数据类型:

数据集合:一般是由多个数据或者变量集合在一起构成

自定义数据:一般是自己可以取名字并且可以自定义的数据

类型特点:

枚举:整形常量的集合,可以自定义

数组:任意变量类型顺序存储的数据

结构体:任意变量的数据集合,可以自定义

2.枚举

枚举是一个很特别的存在,它是一个被命名的整型常量的集合,我们一般用它来表示状态、类型等等。

申明枚举和申明枚举变量不同,申明枚举相当于创建一个自定义的枚举类型。而申明枚举变量是使用申明的自定义枚举类型来创建一个枚举变量

枚举大多与条件分支语句配合使用,比如switch,if ...else...等等。枚举可在namespace语句块或者class语句块或者struct语句块中申明,但一般都在namespa中申明,切记不可在函数语句块中申明。申明枚举时,枚举名应以E或者E_开头,定义枚举名时,如果不赋值,第一个枚举项的默认值为0,然后依次累加。

枚举可以与int类型和string类型相互转换,但是不可强行转换,需要利用特殊方法进行转换。枚举在游戏开发中,可以帮助我们更加清晰的了解代码的内容,来了解代码的具体含义。

3.数组

数组时存储一组相同类型数据的集合,数组分为一维、多维、交错数组,一把情况我们将一维数组简称为数组。简单来讲,数组时一种用于存放同一类数据的容器。

数组(一维)的申明方式(所有的变量类型皆可申明为数组):

int[] array; array = new int[5];
int[] array = new int[5];
int[] array = new int[5]{1,2,3,4,5};
int[] array = new int[]{1,2,3,4,5};
int[] array = {1,2,3,4,5};

二维数组是使用两个索引来确定元素的数组,这两个索引可以理解为X轴和Y轴。二维数组一般用于存储矩阵,例如可以在控制台小游戏中使用二位数组来表示地图格子。

交错数组是数组的数组,每个维度的数量可以不相同。其中二维数组每行的列数相同,交错数组每行的列数可能不同。交错数组可以用来存储同一类型的确定行不确定列的数据。

值类型和引用类型:

值类型:整形、浮点数、char、bool、结构体

引用类型:string、数组(一维、二维、交错)、类

值类型在相互赋值时,将内容拷贝给了对方;而引用类型在相互赋值时,会让双方指向同一个值。值类型和存储类型存储在内存区域是不同的,存储方式也是不同的,这就导致了双方在使用上产生了区别:值类型存储在栈空间,由系统分配,自动回收,数据量小,传输速度快;而引用类型存储在堆控件,需要手动申请和释放,数据量大,传输速度慢。

string虽然属于引用类型,但是它在拷贝内容时,和值类型相同。因为在C#中,string具备了值类型的特征。虽然string使用比较方便,但是在改变string时需要频繁的赋值,会产生大量的内存垃圾。

4.函数

函数也称方法,函数的本质时一块具有名称的代码块,可以使用函数的名称来执行这一代码块。函数通常用于封装代码,提升代码的复用率,也可以用于抽象行为。

函数我们一般用在class语句块或者strust语句块中,函数基本语法为:

static 返回类型 函数名(参数类型 参数名,参数类型 参数名,...)
  {
            函数的代码逻辑;
            函数的代码逻辑;
            ...
            return 返回值;(如果有返回类型才返回)
    }

语法要求:

1.static不是必须的;

2.返回类型需要引用一个新的关键字,返回类型可以写任意的变量类型;

3.函数名应当使用帕斯卡命名法命名,比如MyName;

4.参数不是必须的,参数的类型也可以任意类型,多个参数时需要用逗号隔开,而参数名需使用驼峰命名法命名,比如myName;

5.当返回值不是void时,需通过新的关键词,return返回对应类型的内容

即使函数没用返回值,我们也可以使用return,return可以直接不执行之后的代码,直接返回到函数外部。

ref和out作为函数的修饰符,都可以解决在函数内部改变外部传入的内容,令内部和外部内容都会发生变化。但是ref传入的变量必须初始化,而out不需要;out传入的变量必须在内部赋值,而ref不需要。ref和out在使用时只需要在申明函数的时候,前面加上ref和out的关键字即可。 关于变长参数params,params int[]表示后面可以放入N个int类型的参数,放入的参数会存放在array数组中。params在使用时,关键字后面必须为数组,并且这个数组可以是任意类型的数组。函数参数可以有别的参数和params关键字修饰的参数,但是函数参数中最多出现一个params关键字,并且一定是最后一组参数,但是它的前面可以有N个其他的参数。

有参数默认值的参数一般称为可选参数,可选参数的作用是:当调用函数时如果不放入参数,它会使用默认值来作为参数的值。每个参数都可以有默认值,但如果要混用的话,可选参数必须写在普通参数的后面。

在同一语句块中,函数名相同,参数的数量不同或参数的数量相同,参数的类型或顺序不同时,我们将他成为重载。重载可以命名一组功能相似的函数,减少函数名的数量,避免命名空间的污染,我们一般用来处理不同参数的同一类型的逻辑处理。重载和返回值的类型无关,只与参数类型,个数,顺序有关。调用时,程序会自己根据传入的参数类型来判断使用哪一个重载。

递归函数的概念就是让函数调用函数,当我们在使用递归函数时,需要设置结束调用的条件,并且该条件必须拥有令递归函数停止的功能。

5.结构体

结构体是一种自定义变量类型,类似于枚举,需要自己定义,定义时需使用帕斯卡命名法来命名。它是数据和函数的集合,在结构体中,可以申明各种变量和方法,但是申明的变量不能直接初始化。变量类型可以是任意类型,但是不能包含自己的结构体。结构体通常用来表现存在关系的数据集合,比如用结构体来表现动物,人类等等。

修饰结构体中变量和方法通常使用public和private,public修饰的内容是公共的,可以被外部访问,而private修饰的变量是私有的,只能在内部使用,如果不加任何修饰的话,系统默认使用private。

结构体的构造函数没有返回值,且函数名必须与结构名相同。构造函数必须有参数,如果申明了构造函数,那么必须在其中对所有的变量数据进行初始化。构造函数一般用于在外部初始化数据。

6.排序

排序是计算机内经常进行的一种操作,其目的是将一组没有顺序的记录序列调整为有顺序的记录序列。在程序中,序列一般存储在数组中,所以排序的对象往往是数组。

排序最常用的方法是冒泡排序和选择排序。冒泡排序的基本方法可以概括为:两两相邻,不停比较,不停交换,比较N轮,直到排序完成。选择排序的基本方法可以概括为新建中间数据,一次比较,找出极大值和极小值,放入目标位置,比较N轮,直到排序完成。所有排序的最终目的大都是让最小或最大的数据到数据的最前端,从而使数据能够以一个规定的顺序排列起来。

目录
相关文章
|
6月前
|
存储 开发框架 .NET
【C#】C# 基础语法与游戏开发
【1月更文挑战第21天】【C#】C# 基础语法与游戏开发
C#的基本语法结构学习案例详解
C#的基本语法结构学习案例详解
61 0
|
6月前
|
C#
C#的基本语法结构学习
【5月更文挑战第17天】C#基础语法包括变量(如`int x = 10`)、常量(`const int MAX_VALUE = 100`)、运算符(如算术和比较运算符)、控制语句(if、for、while等)和函数声明(`int Add(int x, int y) { return x + y; }`)。这些构成C#程序的基本元素。
75 0
|
3月前
|
存储 C# 索引
C# 集合语法全解
C# 集合语法全解
29 0
|
6月前
|
开发框架 安全 .NET
C# .NET面试系列一:基础语法
<h2>基础语法 #### 1. 字符串中 string str = null 和 string str = "" 和 string str = string.Empty 的区别? string str=null: ```c# 这表示字符串变量str被初始化为null,即它不引用任何对象。这与空字符串是不同的,因为空字符串是一个具有零长度的字符串对象,不会分配内存空间 ``` string.Empty: ```c# 这表示字符串变量str被初始化为空字符串,即一个具有零长度的字符串对象。这与null是不同的,因为str引用了一个空字符串对象 ``` string str="" :
120 1
|
6月前
|
C#
C#语法快速热身
C#语法快速热身
|
6月前
|
存储 C# 开发者
C#基础语法
C#基础语法
34 0
|
6月前
|
存储 C#
C#基础语法(类和对象)
C#基础语法(类和对象)
40 2
|
6月前
|
存储 C#
C#基础语法(数组和函数)
C#基础语法(数组和函数)
65 1
|
6月前
|
C#
C#基础语法(判断和循环)
C#基础语法(判断和循环)
57 1