一周学C#之第一天——基础知识
一周学C#_第一天(共分六个部分)
基础概念
1 总体框架
Hiker.cs//类名不一定等于文件名
Using System;//每一个程序必须在开头使用这一句
public sealed class HitchHiker
{
public static void Main()//程序从Main开始执行
{
int result;
result=9*6;
int thirteen;
thirte=13;
Console.Write(result/thirteen);//输出函数
Console.Write(result%thirteen);
}
}
//上面各语句的具体用法以后介绍
/*这个程序用来
*演示C#大总体框架
*/
注意:上面的程序中,符号//表示注释(一行)
/*和*/表示之间的内容都是注释
中Windows命令行提示符之下编译,键入:csc Hiker.cs
编译产生的可执行文件是Hiker.exe
中命令行键入:Hiker可以看到输出内容
l C#源文件名不一定要和所包含的类名相同.
l C#对大小写敏感,所以Main的首字母M大写(注意与C语言的差别)
l 可以定义一个返回值为int类型的Main函数,返回0表示成功:
public static int Main(){...return 0;}
l 可以定义Main函数的返回值为void:
public static void Main(){...}
l 可以定义Main函数结构一个String类型的数组参数:
public static void Main(String[] args)
{
foreach(String arg in args){
System.Console.WriteLine(arg);
}
}
l 程序中的Main函数必须声明为static
2 标识符
标识符-命名规则:
局部变量、局部常量、非公有实例域、函数参数——使用camelCase规则
其他类型的标识符——使用PascalCase规则
privateStyle——camelCase规则(第一单词首字母小写,其他单词首字母大写)
PublicStyle——PascalCase规则(所以单词首字母大写)
尽量不要使用缩写
Message,而不要使用msg
不要使用匈牙利命名法
public sealed class GrammarHelper
{
...
public QualifiedSymbol Optional(AnySymbol symbol)
{...}
private AnyMultiplicity optional=new OptionalMultiplicity();
}
3 关键字
C#中有76个关键字:
abstract |
as |
base |
bool |
break |
byte |
case |
catch |
char |
checked |
class |
const |
continue |
decimal |
default |
delegate |
do |
double |
else |
enum |
event |
explicit |
extern |
false |
finally |
fixed |
float |
for |
foreach |
goto |
if |
implicit |
in |
int |
interface |
internal |
is |
lock |
long |
namespace |
new |
null |
object |
operator |
out |
override |
params |
private |
protected |
public |
readonly |
ref |
return |
sbyte |
sealed |
short |
sizeof |
stackalloc |
static |
string |
struct |
switch |
this |
throw |
true |
try |
typeof |
uint |
ulong |
unchecked |
unsafe |
ushort |
using |
virtual |
void |
while |
|
下面5个比较特殊,只在某种情况下属于关键字:
get |
set |
value |
add |
remove |
C#中有76个中任何情况下都有固定意义的关键字。另外有5个中特定情况下才有固定意义的标识符。
例如:value能用来作为变量名,但是一个一种情况例外(把它作属性/索引器的set语句的时候——它是一个关键字)
如果中关键字前面加@,可以使之成为变量名:int @int=42;
不过在一般情况下,不要这样使用。
还可以使用@来产生跨越几行的字符串(这对于产生正则表达式非常有用),例如:
string patten=@”
( #start the group
abra(cad)? #match abra and optional cad
)+”; #one or more occurrences
如果要在字符串中包含【双引号】,那你可以:string quote=@”””quote”””;
4 标点符号
{ 和 } 组成语句块
分号(;)表示一个语句的结束
using Sytem;
public sealed class Hiker
{
public static void Main()
{
int result;
result=9*6;
Console.Write(result);
}
}
一个C#的“类/结构/枚举“的定义不需要一个终止的分号。
public sealed class Hiker
{...}//没有分号;使正确的
但是中结束大括号后面加分号,对程序没有任何影响:
public sealed class Hiker
{...};//有分号是可以的,但是不推荐
C#不允许在一个函数的定义中,使用结尾分号:
public sealed class Hiker
{
public void Hitch(){...};//注意这个结尾的分号是不允许的
}
5 声明
【声明】是在一个块中引入变量,每个变量有一个标识符和一个类型;每个变量的类型不能被改变。
Using System;
public sealed class Hiker
{
public static void Main()
{
int result;
result=9*6;
int thirteen;
thirte=13;
Console.Write(result/thirteen);//输出函数
Console.Write(result%thirteen);
}
}
声明一个变量有时候是非法的,变量可能不会被用到。例如:
if(...)
int x=42;//编译时出错
else
...
6 表达式
【表达式】是用来计算的:
每个表达式产生一个值;
每一表达式必须只有单边作用;
每个变量只有被赋值后才能使用。
Using System;//每一个程序必须在开头使用这一句
public sealed class HitchHiker
{
public static void Main()//程序从Main开始执行
{
int result;
result=9*6;
int thirteen;
thirte=13;
Console.Write(result/thirteen);//输出函数
Console.Write(result%thirteen);
}
}
C#不允许读取未初始化或者被赋值的变量。
int m;
if(...){
m=42;
}
Console.WriteLine(m);//会引起编译器错误,因为m可能不会被赋值
7 取值
类型 |
取值 |
解释 |
bool |
true/false |
布尔型 |
float |
3.14 |
实型 |
double |
3.1415 |
双精度型 |
char |
‘X’ |
字符型 |
int |
9 |
整型 |
string |
“Hello” |
字符串 |
object |
null |
对象 |
8 操作符
操作符 |
类型 |
+ - * / %(取余数) |
算术 |
&& || ! ?: |
逻辑 |
< <= > >= |
关系 |
== != |
相等 |
= |
赋值 |
9 编程风格
较正规的编程风格:
在一个二元操作符的每一边都加一个空格
在每一个逗号后面而不是前面加一个空格
每一个关键字后面加一个空格
一行一个语句
分号前不要有空格
函数的圆括号和参数之间不加空格
在一元操作符和操作数之间不加空格
l 在一个二元操作符的每一边都加一个空格:
Console.WriteLine(“{0}”, result/ 13);
l 在每一个逗号后面而不是前面加一个空格:
Console.WriteLine(“{0}”, result/ 13);
l 每一个关键字后面加一个空格:
if(OneLine(comment))...
l 分号前面不要有空格:
Console.WriteLine(“{0}”, result/ 13);
l 函数的圆括号和参数之间不加空格:
Console.WriteLine(“{0}”, result/ 13);
l 在一元操作符和操作数之间不加空格:
++keywordCount;
10 找错
bool checked;
...
//这里的错误:checked是一个关键字
public static void main()
{...}
//这段的错误:不是main,而是Main
int matched=symbol.Match(input)
if(matched>0)
{
...
}
//这段的错误是,matched变量声明语句,没分号
char optional = ”?”;
string theory = ‘complex’;
//字符值,必须用单引号表示;字符串必须要双引号表示
int matched = 0_or_more(symbol);
...
//第一个错误是标识符不能用数字开头;第二错误是不能用下划线作标识符。