C# 中的声明域
C#程序通过命名空间(Namespace)来组织声明,包含类型声明和嵌套声明。类型声明用于定义类,结构,接口和委托。类型定义中可以声明的成员种类是类型声明来决定的,比如,类的声明可以包含构造方法,析构方法,静态构造方法,常量,字段,属性,方法,事件,索引,操作符等等。
一个声明就是在它所属的声明域定义了一个名称,在类中,除了重载构造方法、重载方法、重载索引、重载操作符之外,在一个声明域中声明两个或更多拥有相同名称的成员是错误的。在一个声明域中包含不同相同名称的不同种类的成员也是不可能的,比如相同名称的字段和方法。下面讨论几种声明域:
命名空间声明域
程序所包含的所有源文件中,命名空间成员声明相同的是一个单独的组合声明域。
如下所示,有两个具有全名相同的命名空间的类将放到相同的命名空间中,他们属于一个声明域。
namespace A.B
{
public class Man
{
}
}
namespace A.B
{
public class Woman
{
}
}
在类前指定partial是c#的一个特性,他可以将两个类进行合并
namespace A.B
{
public partial class Man
{
}
}
namespace A.B
{
public partial class Man
{
}
}
类,结构,接口声明域
每个类、接口或结构都会创建一个新的声明域,在这个声明域中可以加入成员声明、接口成员声明或结构成员声明。除了重载构造方法声明和重载静态构造方法声明,一个类或结构的成员声明不能引入与类或结构名称相同的成员,一个类、结构、接口允许方法和索引的重载。例如,方法名相同,但方法的签名不同。基类不会影响到子类的声明域,如下面代码所示:
class Female : IFuckable
{
public void DoFuck()
{
Console.WriteLine("fuck a female");
}
}
class Girl : Female, IFuckable
{
public void DoFuck()
{
Console.WriteLine("fuck a girl");
}
public void Female()
{
}
}
枚举声明域
每个枚举声明创建了一个新的声明域,在这个声明域中可以声明枚举的成员
局部声明域
每个块为局部变量创建了一个分立的声明域。如果这个块是构造方法或方法的主体,在形参列表中声明的参数将会引入到这个声明域中。在块中定义嵌套块,在嵌套块中不能声明与块中局部变量相同名称的变量。如下面代码所示:
方法F和G有错误,因为i已经在块中声明过了。在H和I中,由于两个i是在分立的嵌套块中声明的,所以H和I是正确的。
class A { void F() { int i = 0; if (true) { int i = 1; // 错误 } } void G() { if (true) { int i = 1; // 错误 } int i = 0; } void H() { if (true) { int i = 0; } if (true) { int i = 1; } } void I() { for (int i = 0; i < 10; i++) { H(); } for (int i = 0; i < 10; i++) { H(); } } }
声明顺序:
一般情况下声明的顺序并不重要,尤其对于命名空间、类、常量、方法、属性、时间、索引、操作符、构造方法、析构方法、静态构造方法来说一点关系都没有,但是在下面的几种情况中,声明顺序是非常重要的:
① 局部变量必须在它使用前被定义
② 当枚举没有指定值时,枚举成员的顺序
浙公网安备 33010602011771号