【发布时间】:2020-02-12 01:39:54
【问题描述】:
我有一个名为 FrameSelector 的类,它只在网页上存储 iframes 的“路径”。此类包含 FramePath 的实例,它是当前帧的实际路径。
我实例化一个 Element 它还包含一个 FramePath 字段,我将 FramePath 从 FrameSelector 分配给它,当我使用基本上清除 FramePath 的 FrameSelector.SelectDefaultContent() 时,Element.FramePath 有 0段,不应更改。
我猜这是因为 Element.FramePath 引用了 FrameSelector.FramePath。
我该如何克服这个问题?
public class Program
{
public static void Run()
{
FrameSelector frameSelector = new FrameSelector();
frameSelector.SelectFrame(0);
Element el = new Element();
el.FramePath = frameSelector.FramePath;
Console.WriteLine(el.FramePath.Segments.Count); // Outputs 1
frameSelector.SelectDefaultContent(); // Resets frameSelector.FramePath
Console.WriteLine(el.FramePath.Segments.Count); // Outputs 0? Why? el.FramePath should not have anything to do with frameSelector.FramePath?
Console.ReadLine();
}
}
class Element
{
public FramePath FramePath;
}
class FrameSelector
{
public FramePath FramePath;
public FrameSelector()
{
FramePath = new FramePath();
}
public void SelectFrame(int id)
{
FramePath.AddSegment($"(//iframe)[{id + 1}]");
}
public void SelectDefaultContent()
{
FramePath.Clear();
}
}
class FramePath
{
public List<string> Segments { get; private set; }
public FramePath()
{
Segments = new List<string>();
}
public void AddSegment(string segment)
{
Segments.Add(segment);
}
public void RemoveLastSegment()
{
Segments.RemoveAt(Segments.Count - 1);
}
public void Clear()
{
Segments.Clear();
}
}
【问题讨论】:
-
"我猜这是因为 Element.FramePath 引用了 FrameSelector.FramePath。" - 是的
标签: c# object reference instance