本章节介绍C#最基础知识(具备一定C#编程的基础知识)。
1.1 第一个C#程序
下面编译的当然是最最经典的helloworld代码,代码如下。
using System.Collections.Generic;
namespace CSharpDemo
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World");
Console.WriteLine();
}
}
}
编译运行结果显示:Hello World
C#没有用于输入输出的内置关键字,而完全是依赖.net类中的System.Console类。标准的system命名空间包含了最常见的.net类型。
1.2定义变量
在C#中声明变量使用下面语法:dataType indentifier;
例如:int i=10,y=20;
1.3 变量的初始化
在C#中变量都必须要进行初始化,若没有初始化,编译器会将当做错误处理。
C#中有两种方法来确保变量在使用之前初始化:
1.变量是类或结构中的字段,如果没有显式初始化,创建这些变量时,其值默认为0。
2.方法中的局部变量必须显式初始化,之后才能够在语句中使用其值。
1.4 类型判断
类型推断使用var关键字,var关键字是C# 3.0开始新增的特性,称为推断类型。编译器可以根据变量的初始化值推断变量的类型,例如:var number=2;那么编译器就能够推断出number类型来,其实就是弱化了类型。
1.5 常量
常量就是在使用过程中不会发生变化的变量,只需要在定义变量之前添加const关键字即可。比如const int a=2;
常量的特性:
1.常量必须在声明中初始化。
2.常量的值必须在编译时用于计算。
3.常量总是静态的。
1.6 数据类型
C#认可的预定义类型并不是内置于C#语言中,而是内置在.net framework中。也就是当您定义了一个int类型声明时,实际上是使用了.net结构中System.Int32的一个实例。
C#预定义类型有15个类型,其中13个值类型,2个引用类型(string和object)
A、整型
sbyte ,8位有符号的整数,范围从 -128到127.
byte ,8位无符号的整数,范围从 0到255.
short,16位有符号的整数,范围从 -32768到32767
ushort ,16位无符号的整数,范围从0到65535
int,32位有符号的整数,范围从-2147483648到2147483647
uint,32位无符号的整数,范围从0到4294967295
long,64位有符号的整数,范围从-2的31次方到2的31次方减1
ulong,64位无符号的整数,范围从0到2的64次方减1
B、浮点类型。
float ,32位单精度浮点数。
double,64位双精度浮点数。
如果代码对某个非整数值,如12.3硬编码,则编译器一般假定该变量是double,如果想指定其为float,则可以在后面加上字符f。
C、decimal类型。
该类型是一种财务专用数据类型,是128位高精度十进制表示法。
要把数据指定为decimal类型的,只需在数字后面加上M(或者m)
D、 bool类型。
C#的bool类型包含true和false。
E、 字符类型。
也就是char类型,表示一个16位的unicode字符。
char类型的字面量是采用 单引号 括起来的。而不是双引号。双引号括起来的是字符串类型的。
F、预定义引用类型。
A、object类型。
这是C#的基类,所有的类都派生自它。所以,可以使用object引用绑定任何子类型的对象,object类型执行许多基本的一般用途的方法,如 Equals() GetHashCode(),GetType()等,我们需要针对某些方法进行“重写,这在后面我们将会学习到。
B、string类型。
说明:值类型和引用类型的区别
首先从概念上区别:值类型直接存储其值,引用类型对其存储值得引用。二者之间不同之处在于,值类型存储在堆栈中,而引用类型存储在托管推中
C#中的数据类型,可以分为值类型和引用类型,值类型存储在堆栈上,而引用类型存储在托管堆上。
如下代码示例,
int i=10;
int j=i;
i和j的值都是10,并且在内存中会有两个地方存储10.
再看下面的代码
Vector x=new Vector();
x.Value=20;
Vector y=x;
Console.WriteLine(y.Value);
y.Value=50;
Console.WriteLine(x.Value);
Vector是一个引用类型,引用类型在使用的时候需要new 来实例化一个。这段代码执行后,只有一个Vector对象,x,y都指向包含该对象的内存地址。因为x,y存储的都是对象的引用,所以当y改变的时候,x也会改变。所以该程序输出的结果是20和50.
如果变量是一个引用,就可以把其值设置为null,表示不指向任何对象
1.7 枚举
枚举是用户定义的整数类型
定义如下的枚举:
using System.Collections.Generic;
namespace CSharpDemo
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(TimeOfDay.Moring);
Console.WriteLine();
}
public enum TimeOfDay
{
Moring=0,
AfterNoon=1,
Evening=2
}
}
}
1.8 命名空间
命名空间提供了一种程序相关组织类和其他类型的方式。与文件不一样,命名空间只是逻辑组合而不是物理组合。
例如:
{}
1.8.1 using语句
用于简化键入繁琐的命名空间。使用using关键字即可。例如using system;
using 关键字的另外一个用途是给类和命名空间添加别名,例如 using alias=system;那么就给system空间增加了一个别名
1.9 C# 预处理指令
1.9.1 #define和#undef
#define debug
告诉编译器存在给定的debug符号
#undef debug
删除debug符号,如果没有这个符号,那么没有任何作用。
1.9.2 #if #elif #else 和endif
这些指令告诉编译器是否要编译某个代码块比如:
{
#if debug
{
//do something
}
}
1.9.3 #warning和error
当编译遇到他们时候分别表示警告或错误。使用如下:
consle.writeline("do something");
1.9.4 #region 和#endregion
该指定用于把一段代码标记为有指定名称的一个模块。该功能主要是方便代码在屏幕上面布局。
使用示例:
class Program
{
static void Main(string[] args)
{
Console.WriteLine(TimeOfDay.Moring);
Console.WriteLine();
}
public enum TimeOfDay
{
Moring=0,
AfterNoon=1,
Evening=2
}
public void doSomeThing()
{
#warning "you should do something"
{
//do something
}
}
}
#endregion
小结:写的比较不够细。