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中的列表字段并没有实例化。好的一点,我已经睡了一半了。将更新。