1,枚举
枚举:用来存放一组固定的常量,他是用来解决用户多次 if/switch重复简单的判断,
枚举是值类型,
枚举的定义:
语法:
[public] enum 枚举名
{
值1,
值2,
值3,
........
}
public:访问修饰符。公开的公共的,哪都可以访问。 enum:关键字,声明枚举的关键字 枚举名:要符合Pascal命名规范
将枚举声明到命名空间的下面,类的外面,表示这个命名空间下,所有的类都可以使用这个枚举。
枚举就是一个变量类型 ,int--double string decimal.只是枚举声明、赋值、使用的方式跟那些普通的变量类型不一样。
public enum 枚举名
{
}
枚举的定义1,如下:
public enum ColorEnum
{
红色, //注意,系统会默认给它赋值为0
蓝色, //系统赋值为1
黑色, //系统赋值为2
粉红色 //系统赋值为3
}
枚举的定义方式2,如下:
public enum ColorEnum
{
红色=2, //用户自己赋值 所以枚举是一组 符号名称/值 配对
蓝色, // 系统赋值为3
黑色=2, //用户自己赋值2
粉红色 //系统赋值为3
}
所以可以看出,系统会自己给没有赋值的常量赋值,
但赋值的方式是按照上一个的值+1来进行操作的
1、 如下枚举的结果正确的是( )
public enum MyColor
{
红色=1,
蓝色=2,
黑色=1,
白色
}
程序输出: Console.WriteLine( (int)MyColor.白色 );
A、1 B、2 C、3 D、程序编译错误
2、 如下枚举的结果正确的是( )
public enum MyColor
{
红色=1,
蓝色=2,
红色=3,
白色
}
程序输出: Console.WriteLine( (int)MyColor.红色 );
A、1 B、2 C、3 D、程序编译错误
提示:枚举中等号左边的值不能重复.
枚举的好处:1便于用户回忆以前的资料;2,便于少出入代码,使程序更容易编写和维护;3,防止用户乱输入
枚举同样也可以跟string类型互相转换,如果将枚举类型转换成string类型,则直接调用ToString(). 如果将字符串转换成枚举类型则需要下面这样一行代码:
(要转换的枚举类型)Enum.Parse(typeof(要转换的枚举类型),"要转换的字符串");
如果转换的字符串是数字,则就算枚举中没有,也会不会抛异常。
如果转换的字符串是文本,如果枚举中没有,则会抛出异常。
枚举类型转换为数组:string[] qqSkip= Enum.GetNames(枚举类型); //该方法返回的是字符串数组
public enum QQState
{
OnLine=1,
OffLine,
Leave,
Busy,
QMe
}
public enum Gender
{
男,
女
}
class Program
{
static void Main(string[] args)
{
#region 将枚举类型强转成int类型
QQState state = QQState.OnLine;
//枚举类型默认可以跟int类型互相转换 枚举类型跟int类型是兼容的
int n = (int)state;
Console.WriteLine(n);
Console.WriteLine((int)QQState.OffLine);
Console.WriteLine((int)QQState.Leave);
Console.WriteLine((int)QQState.Busy);
Console.WriteLine((int)QQState.QMe);
Console.ReadKey();
#endregion
#region 将int类型强转为枚举类型
int n1 = 3;
QQState state = (QQState)n1;
Console.WriteLine(state);
Console.ReadKey();
#endregion
#region 将枚举类型转换成字符串类型
所有的类型都能够转换成string类型
int n1 = 10;
// double n1 = 3.14;
decimal n1 = 5000m;
string s = n1.ToString();
Console.WriteLine(s);
Console.ReadKey();
QQState state = QQState.OnLine;
string s = state.ToString();
Console.WriteLine(s);
Console.ReadKey();
#endregion
#region 将字符串类型转换为枚举类型
string s = "ABCDEFG";
//将s转换成枚举类型
//Convert.ToInt32() int.parse() int.TryParse()
//调用Parse()方法的目的就是为了让它帮助我们将一个字符串转换成对应的枚举类型
//
QQState state = (QQState)Enum.Parse(typeof(QQState), s);
Console.WriteLine(state);
Console.ReadKey();
#endregion
}
}
2,结构
可以帮助我们一次性声明多个不同类型的变量。
语法:
[public] struct 结构名
{
成员;//字段
}
变量在程序运行期间只能存储一个值,而字段可以存储多个值。
3,数组
一次性存储多个相同类型的变量。
语法:
数组类型[] 数组名=new 数组类型[数组长度];
***数组的长度一旦固定了,就不能再被改变了
冒泡排序
int[] nums={9,8,7,6,5,4,3,2,1,0}; 0 1 2 3 4 5 6 7 8 9
第一趟比较:8 7 6 5 4 3 2 1 0 9 交换了9次 i=0 j=nums.Length-1-i
第二趟比较:7 6 5 4 3 2 1 0 8 9 交换了8次 i=1 j=nums.Length-1-i
第三趟比较:6 5 4 3 2 1 0 7 8 9 交换了7次 i=2 j=nums.Length-1-i
第四趟比较:5 4 3 2 1 0 6 7 8 9 交换了6次 i=3 j=nums.Length-1-i
第五趟比较:4 3 2 1 0 5 6 7 8 9 交换了5次
第六趟比较:3 2 1 0 4 5 6 7 8 9 交换了4次
第七趟比较:2 1 0 3 4 5 6 7 8 9 交换了3次
第八趟比较:1 0 2 3 4 5 6 7 8 9 交换了2次
第九趟比较:0 1 2 3 4 5 6 7 8 9 交换了1次
冒泡排序算法:
for(int i=0;i<nums.Length-1;i++)
{
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;
}
}
}
数组常用的方法:Array.Sort(nums);对数组进行升序排列 Array.Reverse(nums);对数组进行反转
4,方法
函数就是将一堆代码进行重用的一种机制。
函数的语法:
[public] static 返回值类型 方法名([参数列表])
{
方法体;
}
public:访问修饰符,公开的,公共的,哪都可以访问。
static:静态的
返回值类型:如果不需要写返回值,写void
方法名:Pascal 每个单词的首字母都大些。其余字母小写
参数列表:完成这个方法所必须要提供给这个方法的条件。如果没有参数,小括号也不能省略。
方法写好后,如果想要被执行,必须要在Main()函数中调用。
方法的调用语法: 类名.方法名([参数]);
***在某些情况下,类名是可以省略的,如果你写的方法跟Main()函数同在一个类中,这个时候, 类名可以省略。
方法中return的用法:1、在方法中返回要返回的值。2、立即结束本次方法
方法的重载
概念:方法的重载指的就是方法的名称相同给,但是参数不同。
参数不同,分为两种情况
1)、如果参数的个数相同,那么参数的类型就不能相同。
2)、如果参数的类型相同,那么参数的个数就不能相同。
***方法的重载跟返回值没有关系。