(一)常量
常量是不能改变的,不能重新赋值
//从表面上看是多了一个const
const 变量类型 变量名=值;
(二)枚举
枚举可以用来规范开发;
枚举声明在:命名空间与类之间;表示这个命名空间下所有的类都可以使用这个枚举;
枚举就是一个变量类型,只是枚举声明、赋值、使用的方式和普通的变量类型不一样,
//语法
[public] enum 枚举名
{
值1;
值2;
值3;
......
}
//放在中括号中,代表这个可以省略[public];
public是访问修饰符,代表访问权限;
enum是关键字,声明枚举名的关键字;符合Pascal命名规范;
赋值的时候需要:枚举名.值;
(三)枚举和int与string之间的转换
枚举类型和int之间默认可以转换;但是要强制类型转换,从0开始计数;
public enum QQStatus
{
OnLine,
OffLine = 4,
Leave,
Busy,
QMe
}
//这里OnLine的int值为0;后面Leave的值为5;
//当然int类型也可以强制转换为枚举类型;
int n = 5;
QQStatus staus = (QQStatus)n;
//当枚举里面有这个序号的时候,可以正常转换;当没有的时候,输出原来的int值;
//枚举类型转换为string类型;所有的类型都可以转换为string类型;
//使用.ToString()
//将字符串转换为枚举类型
string s = "0";//不能直接强制转换
//规范的做法如下
QQStatus sta = (QQStatus)Enum.Parse(typeof(QQStatus), s);
- 枚举类型和int兼容,可以通过强制类型转换的语法相互转换;当转换一个枚举中没有的值时,不会抛出异常,而是直接将数字显示出来;
- 枚举类型可以转换成string类型,可直接调用ToString().
- 如果将string类型转换成枚举类型,需要执行:
(需要转换的枚举类型)Enum.Parse(typeof(枚举类型), "字符串")
QQStatus sta = (QQStatus)Enum.Parse(typeof(QQStatus), s);
注意:如果要转换的字符串是数字,即使枚举中没有,也不会抛出异常;如果不是数字,不能转换成功则会抛出异常;
(四)结构
帮助一次性声明多个不同类型的变量
//语法
//直接写在命名空间与类之间
[public] struct 结构名
{
_成员1;//字段
_成员2;//字段
...
}
//结构本质上是自定义变量类型;
public struct Person
{
public string _name;
public int _age;
public char _gender;
}
class Program
{
static void Main(string[] args)
{
Person zsPerson;
zsPerson.name = "张三";
zsPerson.age = 21;
zsPerson.gender = '男';
}
}
注意:
- 变量在程序运行时,只能存储一个值;字段可以存储多个;
- 字段在命名的时候,需要在前面加上下划线;
public enum Gender
{
male,
female
}
public struct Person
{
public string _name;
public int _age;
public Gender _gender;
}
class Program
{
static void Main(string[] args)
{
Person zsPerson;
zsPerson._name = "zhangsan";
zsPerson._age = 26;
zsPerson._gender = Gender.male;
}
}
(五)数组
一次性存储多个相同类型的变量
//语法
类型[] 数组名 = new 类型[数组长度];
int[] nums = new int[10];
nums[2] = 56;//给下标为2的元素赋值为56
通过下标或者索引来访问元素;
数组访问越界会抛出异常;
数组的长度一旦固定,便不能改变;
- string类型数组,默认初值是null【没开空间】,但是不是空
- int类型数组,默认初值是0;
- bool类型,默认初值是false;
//声明数组的方式,重点是前两种
int[] nums = new int[10];
int[] nums2 = {1, 2, 3, 4, 5};
int[] num3 = new int[] {1, 2, 3};
int[] nums4 = new int[] {1, 2 ,3};
(六)冒泡排序
讲一个数组中的元素按照从大到小或者从小到大的顺序排序;
每次比较相邻两个元素,逆序则交换位置;这样每次都能确定最少一个元素的最终位置
int[] nums = { 1, 2, 5, 89, 3, 101, 45, 23, 100, 89, 78 };
for (int i = 0; i < nums.Length - 1; i++)
{
bool flag = false;
for (int j = 0; j < nums.Length - 1 - i; j++)
{
if (nums[j] > nums[j + 1])
{
int temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
flag = true;
}
}
if (flag == false)
break;
}
for (int i = 0; i < nums.Length; i++)
{
Console.WriteLine(nums[i]);
}
(七)方法/函数
方法即是函数,是一种代码复用的机制;
//函数或方法的语法
[public] static 返回值类型 方法名/函数名 ([参数列表])
{
函数体;
}
//public是访问修饰符,公开的;
//static:静态的
//返回值类型:int, double, void
//命名符合Pascal规则
//参数列表:提供给这个方法或者参数
return作用:
- 在方法中返回要返回的值;
- 立即结束本次方法;
注意:
- 调用函数的时候要使用:类名.方法名()
- 有时候可以省略类名:如果所写的方法和Main函数同在一个类中,可以省略;当不在同一个类的时候,不能省略类名;