C#-NullReferenceException试图通过构造函数给出值时
当我试图通过构造函数为另一个类DataContext的对象(应该)变量赋值时,它总是空的,我得到一个NullReferenceException。当我试图设置访问器时,一切正常C#-NullReferenceException试图通过构造函数给出值时,c#,constructor,nullreferenceexception,encapsulation,C#,Constructor,Nullreferenceexception,Encapsulation,当我试图通过构造函数为另一个类DataContext的对象(应该)变量赋值时,它总是空的,我得到一个NullReferenceException。当我试图设置访问器时,一切正常 public class DataRepository { private DataContext data; private AnyFiller currentFiller; public AnyFiller CurrentFiller { get {
public class DataRepository
{
private DataContext data;
private AnyFiller currentFiller;
public AnyFiller CurrentFiller
{
get
{
return currentFiller;
}
set
{
this.currentFiller = value;
}
}
public DataContext Data { get; set; }
public DataRepository()
{
this.data = new DataContext();
}
public DataRepository(DataContext data)
{
this.data = data;
}
两个构造器都不是很好,但正如我之前所说,当我做这样的事情时,它是有效的:
DataContext cont = new DataContext();
DataRepository data = new DataRepository();
data.Data = cont;
public DataContext Data { get { return data; } set { data = value; } }
谁能告诉我我做错了什么吗?在两个构造函数中,您都在“设置”您的私有字段“数据”。但随后您尝试“获取”您的属性数据,这是通过自动属性快捷方式实现的 您需要更改构造函数以设置属性“Data”而不是私有字段“Data”
public DataRepository()
{
this.Data = new DataContext();
}
public DataRepository(DataContext data)
{
this.Data = data;
}
您可以删除私有字段“data”,因为它与您的属性“data”根本不相关。如果要将属性数据与专用字段“数据”明确关联,则需要执行以下操作:
DataContext cont = new DataContext();
DataRepository data = new DataRepository();
data.Data = cont;
public DataContext Data { get { return data; } set { data = value; } }
公共DataContext数据{get;set;}未使用您的私有变量数据,因此oen构造函数使用私有“日期”,而另一个使用公共“数据”。可能与so重复,构造函数应该使用访问器而不是变量?而且他们两个都不好现在我明白了,非常感谢:)