Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中实例化组合类_C#_.net_Oop - Fatal编程技术网

C# 在C中实例化组合类

C# 在C中实例化组合类,c#,.net,oop,C#,.net,Oop,就列表引用而言,这两个类之间有什么区别 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 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);
    }
}

在第一个示例中,该字段从未被赋值-除非有一些代码没有显示,否则它将始终为null-因此:它不会工作。

SampleList1中的列表字段将抛出null异常,因为它没有实例化。否则,这两个类实际上是相同的。

第一个示例创建列表变量,但不创建对它的引用。如果尝试向其中添加对象,则会收到运行时错误。解决这个问题的方法是添加一个新的子项,该子项将设置list=newlist


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

第一个声明从未为列表设置值,因此它为空。因此,当调用Add时,它将抛出null引用异常。您还可以在构造函数中实例化列表以避免其为空。第二个示例中的操作与第一个示例中的操作等效,因为您没有列表的实例,所以在第一个示例中看到错误 您应该尝试按以下方式实现它:

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

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

    public void Add(T items)
    {

        _myList.Add(items);
    }


}

其中一个将抛出null引用异常?第一个将具有列表字段null,后者将具有对列表的有效引用。你的问题是什么?第一个问题根本不创建任何列表对象。别忘了回答这个问题有什么区别,不仅仅是第一个问题有效。@NicholasPost,虽然很难说,但我不得不告诉你,你在这里开玩笑是有好处的DSampleList1将抛出null异常,因为它未实例化?误导我想应该是SampleList1中的列表字段并没有实例化。好的一点,我已经睡了一半了。将更新。