Подтвердить что ты не робот

Можно ли делать статические частичные классы?

Я хочу взять класс, который у меня есть, и разделить его на несколько небольших классов, чтобы стало легче поддерживать и читать. Но этот класс, который я пытаюсь разделить с помощью partial, является статическим классом.

Я видел в примере на Stackoverflow, что это можно было сделать, но когда я это делаю, он продолжает говорить мне, что я не могу получить статический класс, поскольку статические классы должны выводиться из объекта.

Итак, у меня есть эта настройка:

public static class Facade
{
    // A few general methods that other partial facades will use
}

public static partial class MachineFacade : Facade
{
    // Methods that are specifically for Machine Queries in our Database
}

Любые указатели? Я хочу, чтобы класс Facade был статическим, поэтому мне не нужно его инициализировать перед использованием.

4b9b3361

Ответ 1

Сохранять согласование имен и модификаторов между файлами:

public static partial class Facade
{
    // A few general methods that other partial facades will use
}

public static partial class Facade
{
    // Methods that are specifically for Machine Queries in our Database
}

Ответ 2

Проблема не в том, что класс является классом partial. Проблема в том, что вы пытаетесь получить класс static из другого. Нет смысла выводить класс static, потому что вы не можете использовать Полиморфизм и другие причины для наследования.

Если вы хотите определить класс partial, создайте класс с тем же именем и модификатором доступа.

Ответ 4

вам не нужно ничего переопределять, просто укажите им одно и то же имя:

public static partial class Facade
{
    // this is the 1st part/file
}

public static partial class Facade
{
    // this is the 2nd part/file
}

Ответ 5

С# не поддерживает наследование от статического класса.

Вы должны выбирать между статическими классами:

public static class Facade
{
    // A few general methods that other partial facades will use
}

public static partial class MachineFacade
{
    // Methods that are specifically for Machine Queries in our Database
}

... или вы хотите, чтобы MachineFacade выводился из Facade:

public class Facade
{
    // A few general methods that other partial facades will use
}

public partial class MachineFacade : Facade
{
    // Methods that are specifically for Machine Queries in our Database
}

Ответ 6

Хотя я уже опоздал на вечеринку...
В соответствии с описанием вашей проблемы, я думаю, что ваши цели:

  1. Хотите статический метод группы.
  2. Хотите, чтобы его подгруппа была специализированной для определенного домена.

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

public static class Facade
{
    // some methods

    public static class Machine
    {
        // some other methods
    }
}

Плюсы:

  1. Методы статичны. Вы можете использовать их напрямую, без инициализации каких-либо экземпляров.
  2. Вложенные имена классов используются как пространства имен. Читатели вашего кода четко знают, что методы Facade.Machine более специфичны, чем методы Facade и их целевой домен.
  3. Вы можете создавать методы с одной и той же сигнатурой на разных уровнях класса, делая разные вещи для имитации переопределения методов.

Минусы:

  1. Нет способа запретить пользователям вызывать методы Facade.Machine, когда они не должны.
  2. Нет наследства. Facade.Machine автоматически не имеет методов из Facade.