【问题标题】:"The namespace 'console' already contains a definition for 'Circle'"“命名空间‘console’已经包含‘Circle’的定义”
【发布时间】:2014-04-04 21:57:56
【问题描述】:

我正在为一个学校项目编写一些代码,我们将有一个定义一个圆的类和一个从中绘制的方法,我的代码到目前为止返回“命名空间'console'已经包含'的定义Circle'这里是代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace console
{
    class Program
    {

        static void Main(string[] args)
        {

            Console.Write("What is the circle’s radius: ");
            double radius = Convert.ToDouble(Console.ReadLine());
            Circle ans = new Circle(radius);


            Console.WriteLine("The area of the circle is " + ans.getArea);
            Console.WriteLine("The Diameter of the circle is " + ans.getDiameter);
            Console.WriteLine("The Circumference of the circle is " + ans.getCircumference);

            Console.Write("Enter any character to quit program. ");
            double stop = Console.Read();

        }
    }
}

这就是方法和类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace console
{
    class Circle
    {

 public double radius;
            public const double PI = 3.14159;
            public Circle(double r)
            {
            radius = r;
        }
        public Circle()
        {
            radius = 0.0;
        }

        public double getDiameter
        {
            get
            {
                return radius * 2;
            }

        }


        public double getArea
        {
            get
            {
                return PI * radius * radius;
            }

        }
        public double getCircumference
        {
            get
            {
                return 2 * PI * radius;
            }

        }
        // property Radius 
        public double Radius
        {
            get
            {
                return radius;
            }

            set
            {
                // ensure non-negative radius value 
                if (value >= 0)
                    radius = value;
            }
        }
    }
}

最后一个问题,现在我有了工作代码,set 和 get 应该不允许负输入。但是,当它运行时,负输入仍然返回结果,我错过了什么导致负值仍然被计算?

【问题讨论】:

  • 也许你有两个同名的类Circle
  • 在同一个命名空间中有两个名为 Circle 的类。打电话给测试人员 CircleTester 什么的..
  • 你为什么把这两个类都命名为Circle?用Main方法Program什么的调用那个,问题就没有了。

标签: c# class methods system geometry


【解决方案1】:

(编译器输出消息是你的朋友:一定要学会理解它们。)

在同一个命名空间中不能有两个命名相同的类。

Circleconsole 命名空间中出现两次。

只需重命名其中一个。如果我是你,我会改变第一个,因为它并不是真正的圆形建模。然而,第二类是。

【讨论】:

  • 看,我试过了,改变返回的错误是'当前上下文中不存在空白'这就是为什么我有它,以便两个类都命名相同。
  • 如果将Main类改为Program类后找不到Circle,则说明它们不在同一个项目中。因为它们在同一个命名空间中,所以你甚至不需要 using。这些文件都必须在项目中,最好在同一个文件夹中......
【解决方案2】:

错误非常具体。您已经在同一个命名空间中声明了两个具有相同名称 Circle 的类。你不能那样做。编译器需要能够区分这两个类,如果它们具有相同的名称,如何做到这一点?

我建议将包含 Main 入口点的类的名称更改为更合适的名称,例如 Program

此外,作为一种良好做法,您应该坚持普遍接受的命名约定并将您的命名空间命名为Console,而不是console

【讨论】:

  • 看,我试过了,改变返回的错误是 'blank 在当前上下文中不存在"
  • 什么是“空白”?这不会出现在您的代码中。这是运行时错误还是编译时错误?
  • 我用它来概括抱歉,它会多次返回 PI 和半径。
  • 对不起,我没有真正关注。如果您将带有 Main 的类重命名为 Program,它会编译吗?这是第一步。如果不是,您在同一个项目(即控制台项目)中显示代码的两个类?如果项目确实编译,并且错误是运行时错误,则调试器(或 Visual Studio 中的异常帮助框)应该告诉您异常发生在哪一行,这是哪一行?
  • 啊等等,我明白了。您已经在 Program 类中定义了 PI 和半径,因此在 Circle 类中无法访问它们。将 PI 常量和半径字段移动到 Circle 类中......这应该会继续进行!该错误令人困惑,因为您的代码非常接近工作,如果您将两个 Circle 类都设为部分,它可能会很好地工作。但这不是解决问题的正确方法。您需要将 Circle 类与其基于 Circle 的值/方法与主程序正确分开。
猜你喜欢
  • 2016-07-01
  • 1970-01-01
  • 2022-07-18
  • 1970-01-01
  • 2022-08-13
  • 1970-01-01
  • 2013-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多