Могут ли быть автономные функции в С# без класса?

В C/С++ у меня есть куча функций, которые я вызываю из main(), и я хочу переписать это на С#. Могу ли я иметь автономные функции (методы) или мне нужно поместить их в другой класс? Я знаю, что у меня есть методы в одном классе, но я хочу иметь файл для каждой функции/метода.

Как это работает:

using System.IO;
using System;


class Program
{
    static void Main()
    {
House balls = new House();
balls.said();

    }
}
    public class House
    {
        public void said()
        {
            Console.Write("fatty");
            Console.ReadLine();

        }
    }

Но тогда мне нужно создать экземпляр House и вызвать said(), когда в C я могу просто позвонить said().

Ответы

Ответ 1

Нет. Сделайте их static и поместите их в класс утилиты static, если они действительно не подходят ни к одному из ваших существующих классов.

Ответ 2

Вы должны поместить их в класс, но класс может быть статическим, как упоминалось в других. Если вы действительно хотите иметь отдельный файл для каждого метода, вы можете пометить класс как частичный, чтобы получить следующее:

Program.cs
----------
class Program
{
    static void Main()
    {
        House.said();
        House.saidAgain();
    }
}

House-said.cs
-------------
public static partial class House
{
    public static void said()
    {
        Console.Write("fatty");
        Console.ReadLine();
    }
}

House-saidAgain.cs
------------------
public static partial class House
{
    public static void saidAgain()
    {
        Console.Write("fattyAgain");
        Console.ReadLine();
    }
}

Однако я бы не рекомендовал отделить каждого из них. Частичные классы в основном используются, так что созданный конструктором код не будет перезаписывать какой-либо пользовательский код в том же классе. В противном случае вы можете легко получить сотни файлов и не сможете легко перейти от одного метода к другому. Если вы считаете, что вам нужен частичный класс, потому что количество методов становится недостижимым, тогда вам, вероятно, потребуется разделить логику на другой класс.

Ответ 3

В С# нет концепции автономных функций. Все это объект.

Вы можете создавать статические методы в каком-либо классе утилиты и вызывать их без создания экземпляра класса, например

class Program
{
    static void Main()
    {
    House.said();
    }
}

public class House
    {
        public static void said()
        {
            Console.Write("fatty");
            Console.ReadLine();

        }
    }

Ответ 4

Хотя концепция автономных функций существует в .NET, С# не позволяет вам указывать такие функции. Вам нужно вставлять их в статический класс Utils или аналогичный.

Ответ 5

Если вы объявите свой метод как static (то есть: public static void said()), вы можете просто вызвать его с помощью House.said(), который находится как можно ближе к С#.

Ответ 6

Вы могли бы добавить все свои методы в класс программы, но это быстро стало бы недостижимым беспорядком, обычно называемым "Божественным классом" или "Шаром грязи".

Поддержание одного файла для каждой функции аналогичным образом станет огромным беспорядком. На вопросы "Где мне поместить мои методы" и "Какие классы я должен создать" отвечают "Шаблоны проектирования" . Классы агрегатного поведения (функции) и должны делать одно (однопорядочность).

Ответ 7

Для справки, я хочу добавить здесь using static добавление С# 6.

Теперь вы можете использовать методы статического класса без повторного ввода имени этого класса. Пример, соответствующий этому вопросу, будет:

House.cs

public static class House
{
    public static void Said()
    {
        Console.Write("fatty");
        Console.ReadLine();
    }
}

Program.cs

using static House;

class Program
{
    static void Main()
    {
        Said();
    }
}