Доступ к методам внутри класса (C #)

#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()