Ошибка: имена членов не могут совпадать с их типом включения

Я новичок в С#, я изучаю его, и это просто фиктивная тестовая программа. Я получаю ошибку, которая упоминается в заголовке этого поста. Ниже приведен код 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); }
            }
        }
    }
}

person Muhammad Sohail    schedule 07.02.2014    source источник
comment
Какая часть сообщения об ошибке неясна?   -  person    schedule 07.02.2014
comment
Зачем вам нужен Program, определенный в вашем Program? Просто смени имя!   -  person crashmstr    schedule 07.02.2014
comment
Измените имя программы, которое используется в программе   -  person Anirudha Gupta    schedule 07.02.2014


Ответы (2)


Когда вы делаете это:

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 месяцев и попытаетесь разобраться, что он делает!

person Dr Rob Lang    schedule 07.02.2014
comment
Компилятор мог бы понять это, поскольку классы на самом деле Program и Program.Program. Фундаментальная проблема заключается в том, что спецификация C# определяет, что вы не можете этого сделать. В VB вы можете создать вложенный класс с таким же именем. Я предполагаю, что выбор дизайна был сделан, чтобы избежать двусмысленности и путаницы с синтаксисом конструктора. - person Chris; 07.02.2014
comment
@RobLang я сделал это как правильно. Спасибо, что сообщили мне об этой функции SOF. Я не знал об этом, я тоже новичок здесь. :-) - person Muhammad Sohail; 07.02.2014

У вас есть два класса с одинаковым именем Program. Переименуйте один из них.

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); }
            }
        }
    }
}
person Mehdi Elhaij    schedule 07.02.2014