c# - C# 中引用类型的范围
问题描述
我有一个虚拟目录类的代码:
public class VirtualDirectory
{
internal Dictionary<string, VirtualDirectory> directories;
internal Dictionary<string, VirtualFile> files;
/// <summary>
/// Gets the specified directory.
/// </summary>
/// <returns>A reference to the specified directory.</returns>
public VirtualDirectory getDirectory(string name)
{
return directories[name];
}
/// <summary>
/// Adds a file to the directory.
/// </summary>
/// <param name="file">The file to be added.</param>
/// <param name="name">The file's name.</param>
public void addFile(VirtualFile file, string name)
{
files.Add(name, file);
}
}
如果我这样做:
// Say this new directory is populated
VirtualDirectory directory = new VirtualDirectory;
directory.getDirectory("exdir").addFile(new VirtualFile(), "exfile");
原目录 ( directory.directories["exdir"]
) 是否被修改?或者它只是目录“exdir”的实例?
解决方案
写作:
directory.getDirectory("exdir").addFile(new VirtualFile(), "exfile");
就好像:
var dir = directory.getDirectory("exdir");
dir.addFile(new VirtualFile(), "exfile");
因此,您不会修改您获得的目录实例,也就是说您不会修改引用,但是您在该集合中添加了一个项目,因此集合内容本身被修改。
因此在directory.directories["exdir"]
.
您可以对 a 的一个实例进行多次引用,class
并且使用其中一个来操作此实例提供与使用另一个实例相同的结果。
所以这里的dir
变量是对实例的引用,directory.directories["exdir"]
也可以直接使用这个引用访问。
推荐阅读
- mysql - 需要使用 SQL 从数据集中计算一些指标 - 单独的查询
- flutter - google_mobile_ads 0.13.0 插件横幅广告在颤振应用中调用 setstate 时自动重新加载
- python - 我在 pycharm 上下载 Flask-MySQLdb 时遇到问题,并且一直收到此错误
- python - 有人可以指出我逻辑中的错误。(编码练习)
- flutter - 在 Flutters 空安全中使用 List 让我感到困惑
- camera - Flutter web如何使用相机获取图像并上传到firebase存储
- ios - iOS:在 UIViewRepresentable 和 View 之间进行函数调用,SwiftUI
- c++ - 如何在 C++ 中使用模板化方法?
- python - Sklearn - 我们可以在同一模型中使用交叉验证和批量训练吗?
- amazon-web-services - AWS Toolkit for VSCode 缺少用于导入 lambda 函数的选项