C#学习笔记第二篇之标识符、关键字、基本数据类型
本篇主要讲述C#中的变量声明规则,关键字,以及基本数据类型,这里都会和c/c++以及JAVA比较着学习。
变量命名和声明规则
- C#中的变量命名必须采用首字母小写+后缀单词首字母大写的形式如(caseButtonID),原因是要与公共语言规范(CLS)兼容。
- 不要使用匈牙利命名(什么是匈牙利命名法),C++中会很常见这种方式,特别在MFC中更是常见,如HWND,g_XXX,pfnXXXX,等等,就是属性+类型+名字的形式。
- C#中声明的变量必须赋初值,否者编译就不会通过,而C++中变量没有赋初值也可以使用,只是该值不确定,编译器也不报错,另外static变量和global变量未赋初值会自动赋值,在JAVA中类中的声明的成员变量也是可以不用赋值的,会自动赋一个默认初始的值,但一般都会通过构造函数来初始化这些值。
关键字
//C#中共有77个关键字
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
volatile ?
while
带?是新添加的关键字或者不确定,或者很少用的关键字。
具体内容稍后补上。
基本类型
- 新添加一个decimal货币值,暂时还没有用过稍后补充用法。
- bool值跟java的boolean值都是只对应true或者false而不能用0或者1替代。
- 譬如int基本类型的取值范围同其他语言一样,都是-2的n次方到2的n次方-1,为什么负数的值多一个?因为-0的补码正好是那个最小的负数值的补码,所以正好可以表示最小的那个负数值。不懂的可以讲-0的补码写一写,就明白了。
扩展(null 与"" ,string.empty的区别)
- string str = null 没有创建内存空间,str中存放的是空引用指针;
string str = "" 创建了内存空间,str中存放的是指向堆中的指针。
简单地说:
string str ="";
给你一张白纸;
string str = null;
连白纸也没有。
string.Empty就相当于""
一般用于字符串的初始化
比如:
string a;
Console.WriteLine(a);//这里会报错,因为没有初始化a
而下面不会报错:
string a=string.Empty;
Console.WriteLine(a);
或者用于比较:
if(a=="")
if(a==string.Empty)
上面两句是一样的效果。
string.Empty不分配存储空间
""分配一个长度为空的存储空间
所以一般用string.Empty
- C#判断字符串为空用if(str!=string.Empty)
java中常用if(!"XXXX".isEmpty())或者if(str.equals(""))来判断是否为空值
String与string的区别
c# string映射为.net Framework的String如果用string,编译器会把它编译成String,所以如果直接用String就可以让编译器少做一点点工作
如果使用c#,建议使用string,比较符合规范
string始终代表 System.String(1.x) 或 ::System.String(2.0) ,String只有在前面有using System;的时候并且当前命名空间中没有名为String的类型(class、struct、delegate、enum)的时候才代表System.String
string是关键字,String不是,也就是说string不能作为类、结构、枚举、字段、变量、方法、属性的名称,而String可以