首页 > 解决方案 > 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”的实例?

标签: c#.netclassreferencereturn-value

解决方案


写作:

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"]也可以直接使用这个引用访问。

值类型和引用类型

值类型和引用类型之间的区别


推荐阅读