目录
3. 利用递归,写个文件目录遍历,打印出文件名、扩展名、文件大小
5. 重点比较public、protected、private的区别
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(无修饰符)
- private:仅在声明它的类内部可见。
- default(无修饰符):在同一包内的类可见。
- protected:在同包内的类以及所有子类中可见,不论子类是否在同一个包内。
- public:对所有类可见,无限制。
C#:public、protected、private、internal、internal protected
private只能在类的内部进行访问,面向对象封装的实践,不对外暴露实现细节。
public 满世界随便用.
internal 程序集(多个项目之间共享)中共享
protected本类和子类可以使用,其他类都不行,包括孙子类
5. 重点比较public、protected、private的区别
- public:公共访问权限,被声明为public的成员可以在任何地方被访问。
- protected:保护访问权限,对同一包内的类和所有子类(无论子类是否在同一个包内)开放访问权限。
- private:私有访问权限,仅在声明它的类内部可见,外界无法直接访问。这是最严格的访问控制级别。
总之,public提供最大程度的访问,private提供最严格的封装,而protected介于两者之间,提供了一种既能封装又能允许子类访问的灵活机制。