错误:成员名称不能与其封闭类型相同

时间:2014-02-07 14:35:01

标签: c# class member names

我是C#的新手,我正在学习它,它只是一个虚拟测试程序。我收到了这篇文章标题中提到的错误。下面是C#代码。

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

namespace DriveInfos
{
    class Program
    {
        static void Main(string[] args)
        {
            Program prog = new Program();
            prog.propertyInt = 5;
            Console.WriteLine(prog.propertyInt);
            Console.Read();
        }

        class Program
        {
            public int propertyInt
            {
                get { return 1; }
                set { Console.WriteLine(value); }
            }
        }
    }
}

2 个答案:

答案 0 :(得分:7)

执行此操作时:

Program prog = new Program();

C#编译器无法判断您是否要在此使用Program

namespace DriveInfos
{
    class Program  // This one?
    {
        static void Main(string[] args)
        {

或者,如果您的意思是使用Program的其他定义:

    class Program
    {
        public int propertyInt
        {
            get { return 1; }
            set { Console.WriteLine(value); }
        }
    }

这里最好的办法是更改内部类的名称,它将为您提供:

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

namespace DriveInfos
{
    class Program
    {
        static void Main(string[] args)
        {
            MyProgramContext prog = new MyProgramContext();
            prog.propertyInt = 5;
            Console.WriteLine(prog.propertyInt);
            Console.Read();
        }

        class MyProgramContext
        {
            public int propertyInt
            {
                get { return 1; }
                set { Console.WriteLine(value); }
            }
        }
    }
}

所以现在没有混淆 - 不是为了编译器,也不是为了你在6个月后回来并尝试弄清楚它在做什么!

答案 1 :(得分:2)

你有两个同名的课程“程序”重命名其中一个

namespace DriveInfos
{
    class Program
    {
        static void Main(string[] args)
        {
            Program prog = new Program();
            prog.propertyInt = 5;
            Console.WriteLine(prog.propertyInt);
            Console.Read();
        }

        class Program1
        {
            public int propertyInt
            {
                get { return 1; }
                set { Console.WriteLine(value); }
            }
        }
    }
}