对我学C#时的一次小回忆--[一:语法篇]
使用C#编程已有好长时间了,回想起从前学习时的一些片段及走过的道路,有时也是息虚不已。说真的弯路没少走,而且还是山路十八弯,想学习一门技术付出的坚艰实在是太大了,接触的每一本教材总是或多或少的出现错误,这对于一个学习者来说相当的致命,因为很可能因为一个错误的引导而使自己走向了错误的道路。
万丈高楼平地起。
学习任何一门语言都是先从语法开始学起,至少能用符合语言规则的代码先让程序跑起来,有个大体的印象,建立一个小小的兴趣才会慢慢深入。万一第一个程序就卡死一万次,估计任谁也会失去兴趣。
我看过好几本书《C#高级编程》第二、三、四、六版。我都翻看了。
第一章就是对.net的一个概述。
C#编译分为两个阶段:
1.把源代码编译为Microsoft中间语言(IL)。
2.CLR把IL编译为平台专用的代码。
然后紧接着便进入了C#的[语法篇]
程序的相关要求无非就是:
1.以分号为结尾。
2.字母区分大小写。
3.变量声明需要用字母或_开头。不能用关键字当变量名。
4.C#是类C型语言,{}。
编写一个程序最常做的就是声明变量,变量赋值。
声明变量:
数据类型 变量标识名;
同时还了解到了‘常量’,即:const。
★常量必须在声明时初始化,指定了其值后,就不能再修改了。
同时也看到了C#预定义的数据类型。
并且开篇就给讲了第一个最简单的小程序。学会了两个IO/控制台输入与输出的命令。Console.WriteLine();和Console.ReadLine();
有了这些我就可以编写程序了,虽然它很简单。
using System; namespace MySpaceProject{ public class Hello{ public static void Main(string[] args){ Console.WriteLine("This is my first program!"); Console.ReadKey(); } } }
老是声明变量,输出变量一点意思都没有。咱学程序是干嘛的,除了解决生活中的问题,不就是也想编出强大的程序吗?难道我学来学去只能活在DOS命令行下。
接着继续往下学,又学到了流控制语句和循环语句。
流控制:
if(true){
}else if(true){
}else{
}
public static void Tif(){ int x = 10; Tag: if(x>9 && x<=10){ Console.WriteLine("x>9"); x+=10; goto Tag; }else if(x>10 && x<21){ Console.WriteLine("x in 10 and 20."); x+=100; goto Tag; }else if(x>110 && x<=120){ Console.WriteLine("x < 120."); x -= 115; goto Tag; }else{ Console.WriteLine("x is {0}.",x); } }
switch(v){
case 1:
Console.WriteLine(1);
break;
case 2:
Console.WriteLine(2);
break;
default:
Console.WriteLine("not 1 or not 2");
break;
}
循环语句:for/while/do...while/foreach
for(int i=0;i<x.Length;i++){ //可读,可写
}
while(true){
break;
}
do{
break;
}while(true);
foreach(int i in ArrayOfInt){ //只读for循环
Console.WriteLine(i);
}
跳转语句:
Tag:Console.WriteLine("goto in here!");
break;continue;goto Tag;return;
枚举:
说到枚举这个很有意思,当初一直觉得这个类型有点多余,用整数也是一样的,后来用得次数多了,才发现了它的魅力所在。
枚举:是用户定义的整数类型。枚举就相当于你给整体起了一个别名。
public enum ClubType{
club,vipclub
}
虽然我们可以:
int x = 1;
if(x == 0){
Console.WriteLine("普通会员");
}else if(x == 1){
Console.WriteLine("VIP会员");
}
但是怕就怕,x变量声明的过早,期间又发生了一些运算,导至结果发生了变化,万一经过了计算,x=5;这时判断会员是什么类型的,又该如何显示呢?虽然这种现象很少发生,但很少并不意味着不会发生。
用:
ClubType ct = ClubType.club;
switch(ct){
case ClubType.club:
Console.WriteLine("普通会员");
break;
case ClubType.vipclub:
Console.WriteLine("VIP会员");
break;
default:
throw new Exception("会员类型错!");
break;
}
这样一来,杜绝错误的机率就增大了许多。这就是枚举的妙用。
public static void Tswitch() { ClubType ct = ClubType.club; //默认为普通会员,因为这级别的会员没有特殊权利 Console.Write("请出示您的会员编号:"); string str = Console.ReadLine(); int v_count = 0; int a_count = 0; int k_count = 0; while(str != "exit"){ int keys; if(Int32.TryParse(str,out keys)){ switch(keys){ case 20: v_count++; ct = ClubType.vipclub; break; case 30: a_count++; ct = ClubType.allclub; break; case 40: k_count++; ct = ClubType.kingclub; break; default: ct = ClubType.club; break; } } switch(ct){ case ClubType.club: Console.WriteLine("\r\n您好,欢迎来到会员中心。请待在会员大厅,不要试图去任何地方。"); break; case ClubType.vipclub: Console.WriteLine("\r\n您是我们的VIP会员,这是您第{0}次登录。您除了会员大厅还可以进入自己的包间,其他的房间请不要擅自进入,谢谢合作。",v_count); break; case ClubType.allclub: Console.WriteLine("\r\n您是我们的[特权]会员,这是您第{0}次登录。您可以到达任何地方。",a_count); break; case ClubType.kingclub: Console.WriteLine("\r\n尊贵的会员你好,这是您第{0}次登录。您可以到达任何地方并吩咐任何人为您提供服务。",k_count); break; } Console.Write("\r\n请出示您的会员编号:"); str = Console.ReadLine(); } v_count = 0; a_count = 0; k_count = 0; }
字符串转换为枚举:
MyEnum me = (MyEnum)Enum.Parse(typeof(MyEnum),"string",true);