我遇到以下代码问题。每当我在下面创建一个新的类实例并调用“Select”时,我得到的对象引用未设置为“this.db”上的对象实例
namespace SPI {
class CompaniesDB
{
private DataContainer db;
public void New() {
this.db = new DataContainer();
}
public Company Select(int companyID) {
return this.db.Company_Get(companyID).SingleOrDefault();
}
}
}
有人能指出为什么我的“New()”似乎没有创建新对象吗?
我对C#比较陌生。
答案 0 :(得分:11)
您没有将构造函数命名为New
。您可以使用类名称命名。
尝试
namespace SPI {
class CompaniesDB
{
private DataContainer db;
public CompaniesDB() {
this.db = new DataContainer();
}
public Company Select(int companyID) {
return this.db.Company_Get(companyID).SingleOrDefault();
}
}
}
构造函数的MSDN页面:http://msdn.microsoft.com/en-us/library/ms173115.aspx
答案 1 :(得分:1)
将New方法重命名为CompaniesDB?同时删除'void'修饰符。
答案 2 :(得分:1)
你打算让New()成为你的构造函数吗?如果是这样,C#中构造函数的语法会询问类的名称。所以你的构造函数应该是这样的:
public CompaniesDB()
{
this.db = new DataContainer();
}
希望有所帮助。
答案 3 :(得分:0)
在这种情况下,DataContainer构造函数不需要参数,并且instantion不受New函数中变量的影响,因此您可以完全取消该函数。您可以在声明私有db变量时实例化DataContainer:
namespace SPI {
class CompaniesDB
{
private DataContainer db = new DataContainer();
public Company Select(int companyID) {
return this.db.Company_Get(companyID).SingleOrDefault();
}
}
}
编辑,根据Mike Jolley的要求提供更多信息:
这实际上取决于偏好,两种解决方案都可以正常运行。
您可以使用以下代码:
namespace SPI {
class CompaniesDB
{
private DataContainer db;
public CompaniesDB()
{
db = new DataContainer();
}
public Company Select(int companyID) {
return this.db.Company_Get(companyID).SingleOrDefault();
}
}
}
这段代码很好,您正在创建一个DataContainer实例,其引用将分配给db变量。当您想要开始使用它时,您确保db变量包含引用。
但是,此实例化始终是相同的,因此您可以在构造函数中删除赋值,并且默认情况下只创建一个普通的DataContainer。这还可以确保变量在实例化CompaniesDB对象时始终包含对DataContainer的引用:
namespace SPI {
class CompaniesDB
{
private DataContainer db = new DataContainer();
public Company Select(int companyID) {
return this.db.Company_Get(companyID).SingleOrDefault();
}
}
}
如果DataContainer构造函数接受了参数,则需要构造函数:
namespace SPI {
class CompaniesDB
{
private DataContainer db;
public CompaniesDB(string name)
{
db = new DataContainer(name);
}
public Company Select(int companyID) {
return this.db.Company_Get(companyID).SingleOrDefault();
}
}
}
引入参数意味着在构造函数中创建DataContainer实例会更好。