Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 非静态字段需要对象引用_C# - Fatal编程技术网

C# 非静态字段需要对象引用

C# 非静态字段需要对象引用,c#,C#,我似乎不知道怎么了 如果删除静态修饰符,则调用items.getTotal时会出现问题。如果将其添加回方法,则返回数字字段时会出现问题 如果有任何帮助,我将不胜感激。我还在学习中 我在下面的注释旁边标记了我有错误的那一行 namespace Something { class Program { static void Main() { List<items> item = new List<items>(); int ch

我似乎不知道怎么了

如果删除静态修饰符,则调用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*/
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();