-1

这两个类在列表引用方面有什么区别。

public class SampleList1<T>
{
    List<T> list;    // ref

    public void add(T items)
    {
        list.Add(item);
    }
}


public class SampleList2<T>
{
    List<T> list = new List<T>(); //ref

    public void add(T items)
    {
        list.Add(item);
    }
}
4

5 回答 5

5

在第一个示例中,该字段永远不会被分配一个值 -null除非有一些您没有显示的代码,否则它将一直存在 - 所以:它不会工作

于 2013-09-06T13:22:58.037 回答
1

其中的list字段SampleList1将引发空异常,因为它没有被实例化。否则,这两个类实际上是相同的。

于 2013-09-06T13:23:07.620 回答
1

第一个从未为 List 设置值 - 因此它为空。所以当“Add()”被调用时,它会抛出一个空引用异常。您还可以在构造函数中实例化列表以避免它为空(您在第二个示例中所做的与此等价)

于 2013-09-06T13:26:01.020 回答
0

在第一个示例中,您会看到一个错误,因为您没有 list 实例您应该尝试按如下方式实现它:

 class SampleList<T>
{       
    private readonly List<T> _myList;

    public SampleList(List<T> myList)
     {
         _myList = myList;
     }

    public void Add(T items)
    {

        _myList.Add(items);
    }


}
于 2013-09-06T16:36:40.683 回答
0

第一个示例创建列表变量,但不创建对它的引用。如果您尝试向其中添加对象,您将收到运行时错误。解决这个问题的方法是添加一个 New() sub 来设置 list = new list。

第二个声明对象,然后创建一个引用以便可以使用该对象。

于 2013-09-06T13:23:38.680 回答