#c# #class
#c# #класс
Вопрос:
У меня очень простой вопрос. При этом я попытался решить эту проблему, выполнив поиск по ранее заданным вопросам stackexchange, но у меня ничего не получилось. Это потому, что я хочу знать, как указать точке входа программы доступ к другим классам.
Ранее я написал простой конечный автомат, но код был перегружен, потому что я не знал, как разбить его на классы. В моей новой программе я пытаюсь разбить ее, чтобы ею можно было лучше управлять.
Точка входа начинается с доступа к созданному мной классу, NewState()
. Если вы запустите код, вы заметите, что, несмотря на правильную компиляцию, функция внутри NewState()
не выдает Console.WriteLine
оператор, который я хотел.
Итак, мой вопрос заключается в следующем:
Как мне заставить мой код обращаться к static void State()
методу внутри NewState
класса и отображать Console.WriteLine
инструкцию?
Класс программы:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Finite_State_Machine_3
{
class Program
{
static void Main(string[] args)
{
new NewState();
}
}
}
Класс newState:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Finite_State_Machine_3
{
class NewState
{
static void State()
{
Console.WriteLine("Hello world");
}
}
}
Ответ №1:
Метод является статическим, поэтому вместо создания экземпляра сделайте State
метод общедоступным и попробуйте следующее
static void Main(string[] args)
{
NewState.State();
}
Но если вы собираетесь называть это так, вам, вероятно, было бы лучше поместить его в тот же класс.
class Program
{
static void Main(string[] args)
{
State();
}
static void State()
{
Console.WriteLine("Hello world");
}
}
Если вы хотите использовать его в отдельном классе и вызывать его из экземпляра этого класса, вам нужно сделать State
метод нестатическим (а также общедоступным) и вызвать его из экземпляра
class Program
{
static void Main(string[] args)
{
NewState MyVariable = new NewState();
MyVariable.State();
}
}
class NewState
{
public void State()
{
Console.WriteLine("Hello world");
}
}
Комментарии:
1. Да, это работает отлично. Причина, по которой я хочу, чтобы это было в отдельных классах, заключается в том, что мои состояния FSM станут довольно огромными, и я не хочу держать их в одном массивном, неприглядном классе.
2. @user255919 Сделать код менее неприглядным гораздо сложнее, чем просто разделить его на несколько классов. Но я помню, что мои первые программы были массивными одиночными классами, затем несколькими классами, затем более значимыми классами. Я рекомендую вам продолжать читать код других людей и практиковаться, чтобы вы могли изучить правильную форму
3. @user255919 Кроме того, поскольку вы новичок, я отмечу, что, когда ответ решает вашу проблему, вы можете пометить его как ответ, щелкнув флажок рядом с ним. Становится полезным, когда вы задаете вопросы, на которые другие люди хотят найти ответ
Ответ №2:
Если он статический, то вы будете вызывать его из класса, а не из экземпляра.
Итак,
NewState.State()
Тем не менее, если я правильно помню свои шаблоны проектирования, вы действительно хотите передавать экземпляры, а не использовать статические методы.
Комментарии:
1. Если бы я хотел передавать экземпляры, как бы я это реализовал?
Ответ №3:
Вам нужно создать метод public static
или internal static
, а затем просто вызвать его, вызвав NewState.State()