C# 笔试综合题:静态成员与非静态差异及const与static readonly对比

需积分: 9 4 下载量 15 浏览量 更新于2024-08-02 收藏 364KB DOC 举报
在C#编程中,静态成员和非静态成员是两个重要的概念,它们对于理解类的生命周期和内存管理至关重要。以下是这两个概念的详细阐述: **静态成员(Static Members)**: - 静态成员使用`static`关键字进行修饰,如静态变量和静态方法。它们属于类而不是类的实例,意味着在类被加载时就创建,且不依赖于特定的对象实例。 - **静态变量**:无论创建多少个类的实例,静态变量只有一个副本,其值对所有实例可见。在上面的示例中,`Class1.staticStr`是静态字符串,所有`Class1`对象共享这个相同的字符串"Class"。 - **静态函数**:静态函数不能访问非静态成员(如非静态变量或函数),因为它们没有对具体对象的引用。例如,在`Main`方法中,静态函数只能操作静态变量。 **非静态成员(Non-Static Members)**: - 非静态成员,通常包括实例变量(成员变量)和实例方法,不使用`static`修饰。这些成员与类的每个实例关联,每个实例有自己的副本。 - **实例变量**:如`Class1.tmpObj1.notstaticStr`和`Class1.tmpObj2.notstaticStr`,它们是类`Class1`的不同实例,各自有独立的值,即使变量名相同,也可能存储不同的数据。 **const和static readonly的区别**: - `const`(常量)修饰的成员是编译时确定的,其值在编译阶段赋值且不可更改。例如,`const int MaxValue = 100;`这样的声明,MaxValue在整个程序执行期间保持不变。 - `static readonly`(只读静态)也是在编译时初始化的,但允许类型级别的初始化,这意味着它可以在类定义时设置值,且值不可改变。一旦初始化后,对所有实例都可见。比如,`public static readonly int Count = 5;`,所有`Class1`的实例都将共享这个固定的计数值。 了解和掌握静态成员和非静态成员的区别以及const和static readonly的不同用途,有助于你在编写C#代码时更好地组织和管理类结构,提升代码的可维护性和性能。在面试或笔试中,这类问题可以帮助考察候选人的基础知识和理解能力。