我有一个关于商店的课程。
有这样的设置器(考虑到以前的答案对其进行了修改):
public string SetName(string InitName)
{
name = InitName;
return name;
}
public string SetPlace(string InitPlace)
{
place = InitPlace;
return place;
}
public int SetTurnover(int InitTurnover)
{
turnover = InitTurnover;
return turnover;
}
public double SetAward(double InitAward)
{
award = InitAward;
return award;
}
我正在尝试更新对象字段中的信息,如下所示:
public void EditShop()
{
if (RowNumber == 0)
{
// 0 - Сильпо
Form2.ShopName = Silpo.SetName(ShopName);
Form2.ShopPlace = Silpo.SetPlace(ShopPlace);
Form2.ShopTurnover = Silpo.SetTurnover(ShopTurnover);
Form2.ShopAward = Silpo.SetAward(ShopAward);
}
if (RowNumber == 1)
{
// 1 - АТБ
Form2.ShopName = ATB.SetName(ShopName);
Form2.ShopPlace = ATB.SetPlace(ShopPlace);
Form2.ShopTurnover = ATB.SetTurnover(ShopTurnover);
Form2.ShopAward = ATB.SetAward(ShopAward);
}
if (RowNumber == 2)
{
// 2 - Варус
Form2.ShopName = Varus.SetName(ShopName);
Form2.ShopPlace = Varus.SetPlace(ShopPlace);
Form2.ShopTurnover = Varus.SetTurnover(ShopTurnover);
Form2.ShopAward = Varus.SetAward(ShopAward);
}
if (RowNumber == 3)
{
// 3 - Апельмон
Form2.ShopName = Apelmon.SetName(ShopName);
Form2.ShopPlace = Apelmon.SetPlace(ShopPlace);
Form2.ShopTurnover = Apelmon.SetTurnover(ShopTurnover);
Form2.ShopAward = Apelmon.SetAward(ShopAward);
}
if (RowNumber == 4)
{
// 4 - Ашан
Form2.ShopName = Ashan.SetName(ShopName);
Form2.ShopPlace = Ashan.SetPlace(ShopPlace);
Form2.ShopTurnover = Ashan.SetTurnover(ShopTurnover);
Form2.ShopAward = Ashan.SetAward(ShopAward);
}
}
我经常遇到标题中指示的错误。正式地,责骂(调试器)转到这一行:
Form2.ShopName = Silpo.SetName(ShopName);
但是,据我了解,问题也存在于以下代码行中。
如何解决这个问题?
如果您提供了所有主要代码,那么错误很简单:
调用 EditShop() 函数时
在字符串中,
Form2.ShopName = Silpo.SetName(ShopName);
您有一个等于 NULL 的 Silpo 对象。很容易验证这一点:所有三个或多或少流行的 C# 开发环境(Visual Studio、Visual Studio Code 和 Rider)都有调试器,您可以在其中设置断点,然后简单地将鼠标移到对象上并查看它的价值。
但总的来说,看代码,我觉得还是有几个问题。
让我们依次看看它们。
我又看线了
Form2.ShopName = Silpo.SetName(ShopName);
。如果这是在表单“外部”编写的代码,那么显然 Form2 是表单的一个实例。传统上,为了不混淆任何人,公认类名用大写字母书写,实例名用小写字母书写。第二部分赋值:Silpo.SetName(ShopName)。首先,关于类和实例名称的相同评论。
那么,Silpo属于什么类型就不是很清楚了。然后在这个类型上调用 SetName() 方法,这个方法的名字是误导性的:Set 与一个 setter 相关联,一个 setter 不应该返回一个值。
您可以像这样修复它:在“cassian OOP 范例”中重写:
您将有一个 Shop 课程:
它使用自动 getter - setter。
之后,您可以创建实例:
并使用它的属性
等等
如果你需要使用init值,那么你可以在类构造函数中这样做,它会在实例创建时执行:
您是否注意到代码变得多么简单,需要的功能少了多少?而这只是最微不足道的情况。