如何处理没有';不需要分配
本文关键字:不需要 分配 何处理 处理 | 更新日期: 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");
任何一种模式都可行,但第二种模式更适用于面向对象的设计。