我不明白为什么我会得到CS0120

时间:2016-07-23 21:23:25

标签: c#

我遇到一个错误,并在我的书中搜索了答案,并观看了这个特定主题的教程。差距很大,表示我添加的另一个名为Point

的类
    class Program
    {
        private static Point another;
        static void Main(string[] args)
        {
            Point origin = new Point(1366, 768);
            Point bottomRight = another;
            double distance = origin.DistanceTo(bottomRight);
            Console.WriteLine("Distance is: {0}", distance);
            Console.WriteLine("Number of Point objects: {0}", Point.ObjectCount());
        }
    }
class Point { 
    private int x, y;
        private int objectCount = 0;
        public Point()
        {
            this.x = -1;
            this.y = -1;
            objectCount++;
        }
        public Point(int x, int y)
        {
            this.x = x;
            this.y = y;
            objectCount++;
        }
        public double DistanceTo(Point other)
        {
            int xDiff = this.x - other.x;
            int yDiff = this.y - other.y;
            double distance = Math.Sqrt((xDiff * xDiff) + (yDiff * yDiff));
            return distance;
        }
        public static int ObjectCount()
        {
            **return objectCount;** 
        }
    }

2 个答案:

答案 0 :(得分:3)

您的ObjectCount()方法是 static 方法,而您的属性不是。

public static int ObjectCount()

当您从未在代码中分配的属性中读取时。因此,请从方法签名中删除 static 关键字。

public int ObjectCount()
{
    return objectCount;
}

答案 1 :(得分:0)

1)请在单独的块中发布完整的代码,也请告诉人们您在哪里得到错误;

2)我的猜测是错误CS0120来自以下行:Console.WriteLine(“点对象数:{0}”,Point.ObjectCount());

然而,我想你想要计算所有创建的Point对象。你的错误是使objectCount成为实例成员。

你看,Point类的每个实例都有自己的objectCount,构造函数完成后它总是为1。出于同样的原因,您无法调用Point.ObjectCount()并从中返回objectCount,因为objectCount不是静态成员,而是绑定到实例。

要修复代码,请将objectCount设为静态。这样,Point的所有实例都只有一个objectCount。