C#-z2

目录

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

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

3. 利用递归,写个文件目录遍历,打印出文件名、扩展名、文件大小

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

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


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

  1. 变量的作用域: 变量的作用域决定了在何处可以访问该变量。主要作用域类型包括:

    • 局部作用域:在函数、方法、循环或条件语句内部定义的变量,仅在该定义的代码块内可见。
    • 全局作用域:在所有函数外部定义的变量,对于整个文件或程序都是可见的。
    • 类作用域:在类定义中定义的成员变量,其可见性取决于访问修饰符。
    • 块作用域:某些语言(如C++ 11及以后版本、Java等)中,使用花括号 {} 包围的代码块内定义的变量,只在该块内有效。
    • 命名空间作用域:在编程语言如C++中,命名空间内的变量在整个命名空间内可见。

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

  • 所属不同:成员变量(实例变量)属于类的每个实例,每个对象有自己的成员变量副本;静态变量(类变量)属于类本身,所有对象共享同一份静态变量。
  • 内存位置:成员变量存储在堆内存中,随对象创建而分配,对象销毁时释放;静态变量存储在方法区或类似区域,随着类的加载而创建,类卸载时才释放。
  • 生命周期:成员变量的生命周期与对象相同;静态变量的生命周期与应用程序或类加载器相同,比任何对象的生命周期都要长。
  • 访问方式:成员变量通过对象实例访问;静态变量既可以通过对象访问,也可以直接通过类名访问。
  • 初始化:成员变量在对象创建时初始化;静态变量在类加载时初始化,且只初始化一次。

3. 利用递归,写个文件目录遍历,打印出文件名、扩展名、文件大小

 
using System;
2using System.IO;
3
4class DirectoryTraversal
5{
6    static void Main(string[] args)
7    {
8        string rootPath = @"C:\Your\Directory\Path"; // 指定根目录路径
9        TraverseDirectory(rootPath);
10    }
11
12    static void TraverseDirectory(string directoryPath)
13    {
14        try
15        {
16            DirectoryInfo dir = new DirectoryInfo(directoryPath);
17
18            // 遍历目录中的文件
19            FileInfo[] files = dir.GetFiles();
20            foreach (FileInfo file in files)
21            {
22                Console.WriteLine($"File: {file.Name}, Extension: {file.Extension}, Size: {file.Length} bytes");
23            }
24
25            // 遍历目录中的子目录,并递归调用自身
26            DirectoryInfo[] subDirs = dir.GetDirectories();
27            foreach (DirectoryInfo subdir in subDirs)
28            {
29                TraverseDirectory(subdir.FullName);
30            }
31        }
32        catch (Exception ex)
33        {
34            Console.WriteLine($"Error accessing directory {directoryPath}: {ex.Message}");
35        }
36    }
37}

这段代码首先定义了一个TraverseDirectory方法,它接受一个字符串参数directoryPath,表示要遍历的目录路径。方法内部首先尝试创建一个DirectoryInfo对象来代表这个目录。然后,它遍历该目录下的所有文件,打印出每个文件的名称、扩展名和大小。接着,它继续遍历目录下的所有子目录,并对每个子目录递归调用TraverseDirectory方法。这样就可以遍历整个目录树。如果在访问目录过程中遇到任何异常,代码会捕获这些异常并打印错误信息。

请确保替换@"C:\Your\Directory\Path"为你要遍历的实际目录路径。

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

Java:public、protected、private、defult(无修饰符)

  1. private:仅在声明它的类内部可见。
  2. default(无修饰符):在同一包内的类可见。
  3. protected:在同包内的类以及所有子类中可见,不论子类是否在同一个包内。
  4. public:对所有类可见,无限制。

C#:public、protected、private、internal、internal protected

private只能在类的内部进行访问,面向对象封装的实践,不对外暴露实现细节。

public 满世界随便用.

internal 程序集(多个项目之间共享)中共享 

protected本类和子类可以使用,其他类都不行,包括孙子类

 

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

  • public:公共访问权限,被声明为public的成员可以在任何地方被访问。
  • protected:保护访问权限,对同一包内的类和所有子类(无论子类是否在同一个包内)开放访问权限。
  • private:私有访问权限,仅在声明它的类内部可见,外界无法直接访问。这是最严格的访问控制级别。

总之,public提供最大程度的访问,private提供最严格的封装,而protected介于两者之间,提供了一种既能封装又能允许子类访问的灵活机制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值