我似乎无法弄清楚出了什么问题。
如果我删除静态修饰符然后我有一个问题当我调用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;
}
}
}
答案 0 :(得分:1)
您的某些字段,属性和方法是实例范围的,有些是静态的。您需要保持一致,以便他们互相访问。
静态的东西意味着它与类本身相关联。当某些东西不是静态的时,它与该类的特定实例相关联。
鉴于您似乎正在处理的内容,我建议您从getTotal()中删除static
:
public int getTotal()
{
return number;
}
如果我删除静态修饰符然后我有一个问题,当我调用items.getTotal()如果我将它添加回方法然后我得到一个问题返回数字字段。
我不确定哪个&#34;静态修饰符&#34;你指的是。如果你从getTotal()中删除它,我看不到任何明显会破坏的东西。如果出现问题,请使用中断的特定行更新您的问题。
<强>更新强>
该行
item[new item.Count - 1].RemoveOne(); /*<<error*/
不应包含new
个关键字。只需item.Count - 1
即可获得item
中最后一个元素的索引。
该行
items.getTotal()
给你带来问题,因为items
是类的名称,而不是变量。该语法将尝试在名为getTotal()
的类上调用 static 方法。你可能意味着
item.getTotal()
指的是您实例化的List<items>
。
另请参阅以下关于套管的说明。这样可以更容易地避免此类问题。
关于风格
我建议您按照C# coding conventions specify that classes and methods shall be CamelCase,例如
class Items
{
public int GetTotal()
{
return number;
}
}
遵循该约定使您的代码更易于其他人阅读,也适合您。
答案 1 :(得分:0)
public static int getTotal()
{
return number;
}
您不能在getTotal内引用数字,因为number是实例成员,getTotal是静态的。静态成员是在类型级别定义的,因此不了解特定的基于实例的成员,因此从静态类型引用实例成员是无效的。
答案 2 :(得分:0)
问题是静态方法 getTotal()获取默认值 private int number; 。
您必须做的是将数字字段设为静态,或使方法 getTotal()为非静态。
您必须创建项类的实例,然后从实例中调用getTotal()方法。
实施例
item myItem = new item();
myItem.getTotal();