C#题目问答

1.变量的作用域有哪些? 

  1. 局部作用域:局部变量是在函数、方法、循环、条件语句或其他代码块内部定义的变量。它们只在定义它们的代码块内部可见。一旦离开该代码块,局部变量就会被销毁,且其他作用域无法访问。

  2. 全局作用域:全局变量在整个程序文件中都是可见的,从定义点开始直到程序结束。全局变量可以在文件的任何函数外部定义,并且在程序运行期间一直存在。改变全局变量的值会影响到使用该变量的所有部分。

  3. 块作用域:主要用于限制变量的可见性,使变量仅在特定的代码区域内可访问。一旦代码离开该块,变量就变得不可访问,并且如果变量是局部的,那么它将被销毁。

  4. 方法作用域: 方法体本身可以看作是一个块作用域。在方法中声明的任何变量都在该方法执行完毕后销毁。

  5. 静态作用域:静态变量(或称静态字段)通常在类级别定义,属于类而不属于类的实例,因此具有静态作用域。静态变量在所有实例间共享。

2.成员变量和静态变量的区别?

答:

  1. 所属范围

    • 成员变量(实例变量):属于对象实例,每个对象实例都有自己的成员变量副本,互不影响。
    • 静态变量(类变量):属于类本身,不属于任何单独的对象实例,所有实例共享同一份静态变量。
  2. 存活时间

    • 成员变量:随着对象的创建而存在,随着对象被垃圾回收而消失。
    • 静态变量:随着类的加载而创建,只有当类卸载时才会消失,其生命周期通常长于任何对象实例。
  3. 存储位置

    • 成员变量:存储在堆内存中,每个对象实例在堆上分配的空间中包含各自的成员变量。
    • 静态变量:存储在方法区(或称 permgen space,在Java 8之后的版本中为元数据区)中,因为它们是类级别的数据。
  4. 调用方式

    • 成员变量:必须通过对象实例来访问。
    • 静态变量:既可以通过类名直接访问,也可以通过对象实例访问,但推荐使用类名访问以明确其静态特性。
  5. 初始化时机

    • 成员变量:在对象实例化时初始化。
    • 静态变量:在类加载阶段完成初始化,且只初始化一次。
  6. 数据共享性

    • 成员变量:每个对象有自己的成员变量副本,数据不共享。
    • 静态变量:所有对象共享同一静态变量,修改静态变量会影响所有对象。

3.简述访问修饰符有几种,各有什么不同?

答:

  1. public

    • 公有访问修饰符。被声明为public的成员可以在任何地方被访问,无论是在定义它们的程序集内部还是外部。这是最宽泛的访问级别。
  2. private

    • 私有访问修饰符。private成员只能在定义它们的类或结构内部访问。外部代码,包括子类,都无法访问私有成员。
  3. protected

    • 保护访问修饰符。protected成员可以被定义它们的类以及任何派生类访问,无论这些派生类位于哪个程序集中。对于外部类或非派生类,这些成员是不可见的。
  4. internal

    • 内部访问修饰符。internal成员只能在定义它们的同一程序集内访问。这意味着即使在程序集内部,任何类都可以访问它们,但在外部程序集中则不可见。
  5. internal protected

    • 内部保护访问修饰符。这种组合修饰符使得成员在定义它们的程序集内部或者任何派生类中(无论这些派生类位于哪个程序集)可访问。这提供了比protected更广的访问范围,但又限制在一定的边界内。
  6. private protected

    • 私有保护访问修饰符。这是C# 7.2引入的,允许成员在定义它们的程序集内的派生类中访问,但对程序集外部不可见。这提供了一种限制性更强的保护级别。

4.重点比较public、protected、private的区别。

答:

  1. public:

    • 访问范围public成员可以在任何地方被访问,没有任何限制。无论是同一个类内部、子类、其他类,还是其他程序集,只要拥有对包含该成员的类型的引用,就可以访问public成员。
    • 使用场景:通常用于那些需要公开给外部使用的接口部分,或者类的行为和状态对外界透明的情况下。
  2. protected:

    • 访问范围protected成员可以被同一类内部以及任何派生类访问,无论这些派生类在哪里定义。但是,对于没有继承关系的外部类,或者在定义该成员的类的外部,这些成员是不可见的。
    • 使用场景:适用于设计模式中需要在基类定义某些行为或属性,同时允许或要求子类对其进行重写或访问的情况。
  3. private:

    • 访问范围private成员仅能在定义它们的类内部被访问。子类、同一程序集中的其他类,或任何外部代码都无法访问private成员。
    • 使用场景:用于隐藏实现细节,保护类的内部状态不受外界干扰。这是实现封装和数据隐藏的基础机制,确保了类的内部逻辑不被误用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值