例子:
using Sysytem;
namespace Worx
{
public class MyFirstClass
{
static void Main()
{
Console.Writeline("Hello from Wrox.");
Console.ReadLine();
return;
}
}
}
详细解释
-
命名空间
C#程序中往往会有很多名字相同的类、属性、字段、方法等,为了防止他们具有相同名称而造成名称冲突,在这里利用命名空间来加以区分。例如同一个学校中叫张三的同学不止一个,为了区分彼此,通常会加上班级来做前缀。例如高一三班张三,高二一班张三等等。这种行为和命名空间如出一辙。 -
using
using和C++中的using namespace以及java中的Import类似,他表示在本程序中要使用那些命名空间,这样在代码中碰到一些类、方法、属性、字段等,编译器变回从using过的命名空间中查找。
在本例子代码中用到的using指令表示要使用在System类中的一些方法,其中Console这个类就是在System命名空间中。所以必须使用System命名空间,否则下面的Console类就无法找到,程序出错。 -
类
如上述代码中的MyFirstClass就是一个类,关于类的概念后面介绍面向对象时会详细讲解。
指的注意的是,所有的C#代码必须放在一个类中!!!!
类的声明包括class关键字,例如class MyFirstClass,表示声明一个类,他的名字叫MyFirstClass。
class MyFirstClass
{
//花括号内都是输入MyFirstClass类的部分
}
- public static void Main()
下面声明一个方法Main(),是一个主函数入口。每个可执行文件(如控制台应用程序、Windows应用程序和Windows服务)都必须有一个入口点-----Main()方法(注意M大写)。
这个方法是共用的及在类外也可以使用,其次这个方法是静态的,所谓静态类自带的固定的。它不需要类声明一个对象才能用,可以直接使用。
2.3 变量
1、C#和C++不一样,C#声明变量必须要对其赋值才能使用,否则就会报错。例如
int i;
int j;
j=10; //可以,正确,声明和赋值分开
int k=20; //正确,声明中顺便赋值
int p=10,q=20,n=30; //正确,同时声明并赋值三个变量
console.writeline(i);//这是错误的,C#变量在使用前必须初始化
console.writeline(j);//可以,j已赋值
同样的道理,在声明一个对象的是时候,也必须进行初始化。因为类是一个引用类型,所有对象实际上是指向一块内存的指针。对象的初始化比较特殊。它是用new关键字来的。
2、C#中布尔类型只能用false和true表示,且只能是小写。C++中布尔量可以用数字表示,0为假,非0为真。
bool y=true; //正确
bool X=false; //正确
bool e=True; //错误
bool r=0; //错误
3、极为特殊的数据类型var
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace var_类型
{
class Program
{
static void Main(string[] args)
{
var name = "chenyuxiang"; //定义推断类型的变量name,并赋值字符串
var age = 100; //定义推断类型的变量age,并赋值数字
var shuai = true; //定义推断类型的变量shuai,并赋值true
Type nameType = name.GetType();
Type ageType = age.GetType();
Type shuaiType = shuai.GetType();
Console.WriteLine("name is type"+nameType.ToString());
Console.WriteLine("age is type" + ageType.ToString());
Console.WriteLine("shuai is type" + shuaiType.ToString());
Console.ReadLine();
}
}
}
var类型能够根据初始化时的内容自动推断数据类型。
是必须遵循以下规则:
- 变量必须初始化,否则编译器没有推断类型的依据
- 声明了变量,推断出了类型后,就不能改变变量类型了。
4、变量的作用域
变量的作用是有范围的,所以才有局部变量和全局变量的区别。
一般情况下确定作用域遵循以下规则
- 只要类在某个作用域内,则字段也就是成员变量也在该作用域内。因为字段是类的一部分,类包含字段。
- 局部变量存在于声明变量块语句或方法结束的右花括号之前的作用域内
- 在for、while循环内,局部变量的作用域就是循环体内。
变量的作用域是不能冲突的例如
//这样肯定是错误的,因为同一个作用域内存在相同的变量,引起冲突
int i=20;
int i=30;
在不同循环体内的变量不会冲突
for(int i=0;i<10;i++)
{
//这里的i只作用域本循环内,与外界无关
}
for(int i=10;i>0;i--)
{
//这里的i只作用域本循环内,与外界无关
}
下面着重说明一下特殊的地方
int j=20;
for(int i=0;i<10;i++)
{
int j=30; //这种写法在C#中是错误的,但是在C++或C语言这样写没有问题
}
namespace Worx
{
static int j=20; //静态变量在编译器中看作是字段。与下面局部变量不冲突
public static void Main()
{
int j=30; //这种情况不冲突,最终j为30,此时j就是局部变量
}
}
5、常量
在实际编程中会用到各种常量形式的参数,数据等。但是这些如果用纯数字表示则会变得很难理解。
//Sum(int min,int max)表示计算从min累加到max的和。
Sum(1,100); //这种代码后期阅读比较困难,需要查阅才能看懂
const int Min=1;
const int Max=100;
Sum(Min,Max); //这种代码阅读编辑,很容易分辨参数的含义。
当然也许有疑问,为什么要加const,下面我们讲解const的含义
const是个关键字,它与声明变量一起使用时,表示该值就是常量,他的优点有一下几个:
- 它表示代码后面不能改动的。在某些程度上起到了安全性。
- 它方便与程序阅读,容易理解
- 它便于程序修改,把参数集中在一起只要修改const int i=要修改的值即可。
- 防止程序出现错误,因为他是不可赋值的。