如何处理没有';不需要分配

本文关键字:不需要 分配 何处理 处理 | 更新日期: 2023-09-27 18:25:16

小示例:

class Folder {
    public List<B> Children = new List<B>();
    public string Name;
    public Folder(string name) { Name = name; }
}
class File {
    public Folder Parent;
    public string Name;
    public File(Folder parent, string name) {
        Parent = parent;
        Name = name;
        Parent.Children.Add(this);
    }
}
Folder folder=new Folder("windows");
new File(folder, "notepad.exe"); //<--- this
new File(folder, "regedit.exe"); //<--- and this

这就是为什么不将它们分配给任何变量的法律原因。我担心编译器会优化出什么。但更令人担忧的是,这个代码看起来不像它应该是什么样子

在这种情况下,需要做些什么才能使代码看起来不坏?

如何处理没有';不需要分配

编译器不会"优化"对File构造函数的调用。然而,你在这里做的不是一个好主意。从用法上看,传递给File构造函数的Folder正在被修改,并且正在存储对新File的引用,从而使其实际上不会被垃圾收集。

考虑做这样的事情:

class Folder 
{
    ...
    public void AddFile(string name)
    {
        Children.Add(new File(this, name));
    }
}

您最好在File上有一个工厂方法,或者有一个将文件添加到文件夹对象上的文件夹的方法。

第一个:

class File
{
    public Folder Parent;
    public string Name;
    public static void Create(Folder parent, string name)
    {
        Parent.Children.Add(new File { Parent = parent, Name = name });
    }
}
var folder = new Folder("windows");
File.Create(folder, "notepad.exe");
File.Create(folder, "regedit.exe");

第二:

class Folder 
{
    public List<File> Children = new List<File>();
    public string Name;
    public Folder(string name) { Name = name; }
    public void Add(string name)
    {
        Children.Add(new File { Parent = this, Name = name });
    }
}

var folder = new Folder("windows");
folder.Add("notepad.exe");
folder.Add("regedit.exe");

任何一种模式都可行,但第二种模式更适用于面向对象的设计。