C#'Default1':成员名称不能与其封闭类型相同

时间:2012-05-03 21:41:30

标签: c# .net visual-studio-2010 c#-4.0

我收到此错误并确定如何修复它,我正在尝试创建一个继承自Default1的加载器类,然后在该方法中使用它。

namespace MyLevel
{
    class Default1
    {
        public interface Default1
        {
            IEnumerable<DefaultCore> GetDefaultValues();
        }
    }
}

任何帮助表示赞赏

4 个答案:

答案 0 :(得分:3)

我认为你在这里很困惑如何定义和/或实现接口。

你所拥有的是一个名为Default1的类,它定义了一个名为Default1的内部嵌套接口。这有三个问题:

  1. 你做不到;名称不能相同,因为它可能会使名称产生歧义。这里的错误信息非常清楚。 (正如其他人所说,接口通常称为ISomething,它解决了名称冲突。

  2. 该界面以奇怪的方式定义;它嵌套在内部(感谢@FishBasketGordo提醒我!)类。这意味着它只在您定义它的程序集中可见,并且必须引用为Default1.IDefault(假设您修改了名称)。

  3. 实际上没有实现您的界面,因此不会在任何地方使用它。

  4. 如果要定义接口,则不需要类:

    namespace MyLevel
    {
        public interface IDefault
        {
            IEnumerable<DefaultCore> GetDefaultValues();
        }
    }
    

    如果您希望您的课程实现该界面:

    namespace MyLevel
    {
        public class Default1 : IDefault
        {
            public IEnumerable<DefaultCore> GetDefaultValues() { }
        }
    }
    

答案 1 :(得分:1)

因为您已经在类中定义了接口,所以它是该类的成员,并且一个类不能具有两个具有相同名称的成员,也不能具有与该类本身具有相同名称的成员。这就是错误信息所说的内容。

因此,更改Default1(类)或Default1(接口)的名称。

大多数接口都按照约定以大写I作为前缀,因此IDefault1将是接口的不错选择。另外,无关紧要的是,为什么要在类中定义接口?

答案 2 :(得分:1)

如果希望类继承接口,则需要在类之外。其次,使用标准命名约定并在接口名称前加上I(例如IDefaultICloneableIDisposable等):

namespace MyLevel
{
    public class Default : IDefault
    {

    }

    public interface IDefault
    {
        IEnumerable<DefaultCore> GetDefaultValues();            
    }
}

答案 3 :(得分:-1)

您的代码未经过评估。

接口是(正常)以I

开头

不要求构建,但作为LAW

是常见的

去IDefault!

PRASHANT:)