C# 本例中的引用类型缺少什么?

C# 本例中的引用类型缺少什么?,c#,C#,我有以下代码,我创建了一个对象,并通过一系列表单将其传递给用户控件 public class MyObject { public List<AnObject> Objects {get; set;} } 用户控制1 public List<AnObject> Objects {get; set;} ... Objects.Add(new myObject()); 公共列表对象{get;set;} ... 添加(新的myObject()); 当我向UserCo

我有以下代码,我创建了一个对象,并通过一系列表单将其传递给用户控件

public class MyObject
{
   public List<AnObject> Objects {get; set;}
}
用户控制1

public List<AnObject> Objects {get; set;}
...

Objects.Add(new myObject());
公共列表对象{get;set;}
...
添加(新的myObject());

当我向UserControl1中的对象添加新的myObject()时,它不会更新Form1上的原始列表。我正在通过引用传递我的对象。我能想到的唯一一件事是,当我将表单2的一个对象列表分配给UserControl1时,以某种方式取消绑定我的值。我做错了什么

甚至不需要
ref

当我向UserControl1中的对象添加新的myObject()时,它不会更新Form1上的原始列表

它应该这样做。最好发布准确的代码,这部分向我显示代码未被复制/粘贴:

public Form2(ref MyObject myObject)
{
    UserControl1 myControl = new UserControl1();
    myControl.Objects = myObjects.Objects  // extra 's'
}

所以我们现在正在寻找代码中的一个小问题,它是真实内容的不精确拷贝。无可救药

.NET中的对象无论如何都是引用类型
ref
在这种情况下,仅当您可能希望在同一参数中传回另一个对象而不是返回新对象时才有必要。对于您在这里所做的工作,
ref
完全没有必要。(这与
struct
s相比,后者是值类型,因此
ref
做了一些可能更有用的事情)类似地,由于对象已经是值类型,这里没有装箱或取消装箱的概念

  • ref与本例无关。如果没有ref,您将传递列表的引用,正如您所希望的那样(这将由两种表单共享)。(需要ref关键字的代码-非常罕见。)

  • 列表
    没有关于其更改的通知。因此,当你以一种形式更改它的内容时,另一种形式并不知道。考虑使用<代码> <代码>,并在控件中订阅其<代码> <代码>事件。

  • 你没有显示足够的代码让我们知道发生了什么。请提供一个简短但完整的程序-最好是一个控制台应用程序,因为我认为这里不需要用户界面。正如Henk所说,这里甚至不需要
    ref
    。您是否碰巧使用MyObject作为控件(例如ListBox)的数据源,并且添加到MyObject时该控件不会更新?
    public List<AnObject> Objects {get; set;}
    ...
    
    Objects.Add(new myObject());
    
    public Form2(ref MyObject myObject)
    {
        UserControl1 myControl = new UserControl1();
        myControl.Objects = myObjects.Objects  // extra 's'
    }