Я только начал изучать C# несколько недель назад и имею полтора года опыта работы с Python, поэтому было бы лучше, если бы я мог получить более подробное объяснение того, почему я получаю эту ошибку. Я попытался выполнить поиск в Google, чтобы узнать, получал ли кто-нибудь эту ошибку раньше, но я не могу понять решения и как их ввести. Вот код, нашли что-то не так?
using System;
namespace RectangleApplication
{
class Rectangle
{
double length;
double width;
public void Acceptdetails()
{
length = 4.5;
width = 3.5;
}
public double GetArea()
{
return length * width;
}
public void Display()
{
Console.WriteLine("length: {0}", length);
Console.WriteLine("Width: {0}", width);
Console.WriteLine("Area: {0}", GetArea());
}
}
class ExecuteRectangle
{
static void Main(string[] args)
{
Rectangle r = new Rectangle();
r.Acceptdetails();
r.Display();
Console.ReadLine();
}
}
}
Если Visual Studio сгенерировала для вас ваш проект (например, если вы выбрали «Новый проект»/«Windows Forms»), возможно, она уже добавила для вас метод Main
. Найдите свою кодовую базу.
Ошибка находится в строке 9 в соответствии с терминалом, также помните, что я очень новичок в C# и объектно-ориентированном программировании.
@SiddharthHarish: А что такое строка 9? Как вы компилируете это приложение? Это один файл кода, который вы компилируете в командной строке? Если да, то какую команду вы используете? Каков точный и полный вывод, созданный этой командой? Или вы используете IDE, например Visual Studio? Если да, то какова структура проекта? Есть ли другие файлы кода?
Проект класса не имеет файла main. Консольный проект должен иметь только один файл main. Если вы добавите проект класса в консольный проект, а проект класса имеет основной, у вас будет две основные точки входа.
code 9 - Двойная длина
@SiddharthHarish: double length;
(что нет то же самое, что и «Двойная длина») не вызывает проблемы. Показанный код компилируется и работает без ошибок. Мы понимаем, что вы новичок в C#, но вам придется предоставить информацию о проблеме, чтобы кто-нибудь мог вам помочь. Очевидно, что происходит нечто большее, чем просто показанный код.
@David «двойная длина» - это девятая строка, и я использую «Visual studio для Mac» для редактирования и запуска кода. Это всего лишь мой второй скрипт после этого руководства - (tutorialspoint.com/csharp/csharp_tutorial.pdf), и никаких других файлов кода C#.
@SiddharthHarish: Возможно, вы могли бы обновить вопрос, включив в него скриншот того, что вы видите, включая вывод ошибок и структуру проекта.
Я скопировал ваш код точно в новое консольное приложение с помощью VS 2022, и он работал нормально. В структуре вашего проекта происходит больше, чем вы думаете.
Код действительно показывает ошибку в коде VS, а затем через ~ 5-10 секунд выдается вывод. Думаю, я просто слишком остро отреагировал. Извините за беспокойство.
Выложенный код правильный.
Если вы используете метод читать о Main()
, вы видите, что он имеет следующие требования, чтобы быть точкой входа.
Должен быть метод static
внутри класса
Должен вызвать Main()
Может иметь модификаторы доступа public
, internal
, protected
или private
Может иметь аргументы, перехватывающие аргументы командной строки.
static void Main(string[] args)
{
}
Может иметь ноль аргументов
static void Main()
{
}
В каждом проекте должен быть определен только один такой метод.
В вашем случае может быть другой файл с именем Program.cs
, который также определяет метод Main()
. Удалите этот другой файл или переместите основной метод из class ExecuteRectangle
в class Program
.
Для приложений winforms основные методы загружают основную форму и отображают ее с помощью Application.Run()
.
В связи с этим, поскольку вы изучаете C# и ООП, рассмотрите приведенный ниже код с функциональностью, аналогичной вашей, но со стандартным синтаксисом C#, который использует свойства, конструкторы и метод ToString()
для создания строковых представлений объектов.
class Rectangle
{
double length;
double width;
public Rectangle(double length, double width)
{
this.length = length;
this.width = width;
}
public double Length
{
get { return length; }
set
{
length = value;
}
}
public double Width
{
get { return width; }
set
{
width = value;
}
}
public double Area
{
get { return length * width; }
}
public override string ToString()
{
return $@"Length {Length}
Width {Width}
Area {Area}";
}
class ExecuteRectangle
{
static void Main(string[] args)
{
Rectangle r = new Rectangle(4.5, 3.5);
Console.WriteLine(r);
//Length: 4.5
//Width: 3.5
//Area: 15.75
r.Length = 6.5;
Console.WriteLine(r);
//Length: 6.5
//Width: 3.5
//Area: 22.75
Console.ReadLine();
}
}
Я специально сделал свойства изменяемыми (могут быть изменены), потому что это общий выбор дизайна. Если бы свойства были неизменяемыми, то не было бы метода set
, а перед полями было бы ключевое слово readonly
.
Спасибо, я понял, что код VS просто выдавал случайную ошибку, но позже показал вывод.
@JebKerman - см. правки выше. Я решил включить мини-урок о том, как настроить свойства, что-то, что вы, возможно, не использовали с Python
. Свойства — это де-факто способ получить или установить информацию из класса в C#.
В ошибке написано строка: 9 Файл: Program.cs
Ваш код находится в EmptyCSharpFile.cs
В вашем проекте есть еще один файл .cs с именем Program.cs, в котором есть метод Main
, и именно он вызывает проблему. Двойной щелчок по ошибке должен привести вас к строке кода, в которой произошел сбой.
Действительно полезно знать. Я также создаю новые консоли из терминала, что действительно помогает. :)
У вас может быть только один метод
Main
во всей вашей программе.