Можно ли делать статические частичные классы?
Я хочу взять класс, который у меня есть, и разделить его на несколько небольших классов, чтобы стало легче поддерживать и читать. Но этот класс, который я пытаюсь разделить с помощью 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
был статическим, поэтому мне не нужно его инициализировать перед использованием.
Ответы
Ответ 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
, создайте класс с тем же именем и модификатором доступа.
Ответ 3
Вы не можете наследовать статический класс.
Статические классы запечатаны и поэтому не могут быть унаследованы. Oни не может наследовать ни один класс, кроме Object.
Ответ 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
Хотя я уже опоздал на вечеринку...
В соответствии с описанием вашей проблемы, я думаю, что ваши цели:
- Хотите статический метод группы.
- Хотите, чтобы его подгруппа была специализированной для определенного домена.
В этом случае я бы предложил использовать вложенные классы:
public static class Facade
{
// some methods
public static class Machine
{
// some other methods
}
}
Плюсы:
- Методы статичны. Вы можете использовать их напрямую, без инициализации каких-либо экземпляров.
- Вложенные имена классов используются как пространства имен. Читатели вашего кода четко знают, что методы
Facade.Machine
более специфичны, чем методы Facade
и их целевой домен.
- Вы можете создавать методы с одной и той же сигнатурой на разных уровнях класса, делая разные вещи для имитации переопределения методов.
Минусы:
- Нет способа запретить пользователям вызывать методы
Facade.Machine
, когда они не должны.
- Нет наследства.
Facade.Machine
автоматически не имеет методов из Facade
.