C# 非静态字段需要对象引用
我似乎不知道怎么了 如果删除静态修饰符,则调用items.getTotal时会出现问题。如果将其添加回方法,则返回数字字段时会出现问题 如果有任何帮助,我将不胜感激。我还在学习中 我在下面的注释旁边标记了我有错误的那一行C# 非静态字段需要对象引用,c#,C#,我似乎不知道怎么了 如果删除静态修饰符,则调用items.getTotal时会出现问题。如果将其添加回方法,则返回数字字段时会出现问题 如果有任何帮助,我将不胜感激。我还在学习中 我在下面的注释旁边标记了我有错误的那一行 namespace Something { class Program { static void Main() { List<items> item = new List<items>(); int ch
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*/
items.getTotal()
会给您带来问题,因为items是类的名称,而不是变量。该语法将尝试在名为getTotal的类上调用静态方法。你可能是说
item.getTotal()
它引用了您的实例化列表
另请参见以下有关套管的注释。这将更容易避免此类问题
关于风格
我建议你遵循这个原则
遵循这种约定可以使您的代码更容易让其他人阅读,对您也是如此
public static int getTotal()
{
return number;
}
您不能在getTotal中引用number,因为number是实例成员,而getTotal是静态的。静态成员是在类型级别定义的,因此不知道特定的基于实例的成员,因此从静态类型引用实例成员是无效的。问题是静态方法getTotal获取private int number;的默认值 您必须做的是将number字段设置为静态,或者将getTotal方法设置为非静态 必须创建item类的实例,然后从该实例调用getTotal方法 范例
item myItem = new item();
myItem.getTotal();
您会遇到哪些具体错误?您可以编辑您的问题以添加它们。我更新了问题并从GetTotal方法中删除了静态。我在两行上得到了错误。这完全有道理。我试图遵循Programmr.com上的联机教程,所以我不想修改它。我已经修改了代码,但仍然会弹出以下错误。列表不包含接受可能找到的列表类型的第一个参数的“GetTotal”的定义缺少using指令或程序集引用吗?谢谢你的帮助!看起来你多了一个点?列表应该是列表。感谢您的帮助!这就引出了更多关于泛型的问题,我将在另一个问题中发布这些问题。
item myItem = new item();
myItem.getTotal();