非静态字段需要对象引用
本文关键字:对象引用 字段 静态 | 更新日期: 2023-09-27 18:27:19
我似乎不知道出了什么问题。
如果我删除了静态修饰符,那么我在调用items.getTotal()时会遇到问题。如果我将其添加回方法中,那么我会在返回数字字段时遇到问题。
如果有任何帮助,我将不胜感激,我仍在学习中。
我在下面的注释旁边标记了我在哪一行有错误。
namespace Something
{
class Program
{
static void Main()
{
List<items> item = new List<items>();
int choice;
while (true)
{
Console.WriteLine("Please select an option:");
Console.WriteLine("1) Create item:");
Console.WriteLine("2) Destroy last item:");
Console.WriteLine("3) Exit:");
choice = int.Parse(Console.ReadLine());
switch (choice)
{
case 1:
Console.Write("Name of new item:");
items obj = new items(Console.ReadLine());
item.Add(obj);
break;
case 2:
if (item.Count > 0)
{
item[new item.Count - 1].RemoveOne(); /*<<error*/
item.RemoveAt(item.Count - 1);
}
break;
case 3:
Console.WriteLine("Total number of items:" + items.getTotal()); /*<<error*/
Environment.Exit(0);
break;
default:
break;
}
}
}
}
class items
{
//write your code here
private string name;
private int number;
public items(string a)
{
this.name = a;
this.number++;
Console.WriteLine("successfully created");
}
public void RemoveOne()
{
Console.WriteLine(this.name);
this.number = this.number + 1;
}
public int getTotal()
{
return number;
}
}
}
有些字段、属性和方法是实例范围的,有些是静态的。您需要保持一致,以便他们能够相互访问。
静态的东西意味着它与类本身相关联。当某个东西不是静态的时,它与类的特定实例相关联。
考虑到您正在处理的内容,我建议您从getTotal():中删除static
public int getTotal()
{
return number;
}
如果我删除了静态修饰符,那么我在调用items.getTotal()时会遇到问题。如果我将其添加回方法中,那么我会在返回数字字段时遇到问题。
我不确定你指的是哪一个"静态修饰符"。如果你把它从getTotal()中删除,我看不到任何明显会破坏的东西。如果确实发生了什么,请用中断的特定行更新您的问题。
更新
线路
item[new item.Count - 1].RemoveOne(); /*<<error*/
不应该包含new
关键字。只需item.Count - 1
就会为您提供item
中最后一个元素的索引。
线路
items.getTotal()
会给您带来问题,因为items
是类的名称,而不是变量。该语法将尝试在名为getTotal()
的类上调用静态方法。你可能是指
item.getTotal()
它指的是您实例化的CCD_ 7。
另请参阅以下关于套管的说明。这将使避免此类问题变得更加容易。
关于样式
我建议您遵循C#编码约定,该约定指定类和方法应为CamelCase,例如
class Items
{
public int GetTotal()
{
return number;
}
}
遵循这个约定会使您的代码更容易被其他人阅读,对您来说也是如此。
public static int getTotal()
{
return number;
}
您不能在getTotal中引用数字,因为数字是实例成员,而getTotal是静态的。静态成员是在类型级别定义的,因此不知道特定的基于实例的成员,因此从静态类型引用实例成员是无效的。
问题是静态方法getTotal()获取私有int数的默认值。
您必须使数字字段为静态字段,或者使方法getTotal()为非静态字段。
您必须创建项类的实例,然后从该实例中调用getTotal()方法。
示例
item myItem = new item();
myItem.getTotal();