本节书摘来自异步社区《.NET程序员面试秘笈》一书中的第1章,面试题6,作者: 张云翯, 更多章节内容可以访问云栖社区“异步社区”公众号查看。
面试题6 请简述静态类和静态类成员
.NET程序员面试秘笈
【考点】静态类和静态类成员的理解,static在应用中的特殊性。
【出现频率】
【解答】
在ch01目录下新建一个程序文件,并命名为Static.cs,编写代码如程序1.7所示。
在命令行下编译Static.cs后,执行Static程序,其效果如图1.9所示。
本例的Main方法中,首先将用户第1次输入的值通过逗号分隔为2个字符串,再分别赋值给PC类的静态字段,即cpu和memory;然后将用户的第2次输入也分隔为2个字符串,并转换为整数类型赋值给p和n。通过传递参数p和n给PC的构造函数创建了PC类的对象ibm,并进行了初始化。在用户输入值后的第1行访问了PC类的2个静态字段,并通过实例方法计算了总价。在第2行直接调用了静态类CpuMsg的静态方法getmsg(),静态类CpuMsg完全不需要实例化,可以很方便地直接在程序中使用。在.NET的类库中有很多类似的静态类,可以在程序中直接使用其方法,例如Math类。
【分析】
static是比较特殊的修饰符,它所修饰的类或类成员被称为静态类或静态类成员。
当类中某些成员不需要创建实例实现,则可将其声明为静态类成员。静态成员在访问时直接引用类名而非对象名,同样,“this”关键字也无法访问静态成员。这些成员可用作该类的多个对象共享的数据,因为静态类成员不依赖某个对象。声明静态类成员如以下代码所示:
访问修饰符 static 数据类型 类成员;
当类中没有和对象实例相关的成员时,即类体中只有静态成员,可声明该类为静态类。静态类无法用new创建对象,所以并不能编写构造函数,并且该类是密封类(即无法被继承)。静态类的声明方法如以下代码所示:
访问修饰符 static class 类名称
{
静态类成员1;
静态类成员2;
静态类成员3;
...
}
必须注意的是,类中的常数声明和类型声明默认为静态,如类体中声明1个类,这个类默认为static,即无法被所属类的对象访问。
注意:
声明静态类时,必须保证其内含成员全部为静态成员。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。