Чем отличается статический класс со статическим методом от обычного класса со статическим методом? - PullRequest
1 голос
/ 30 сентября 2011

Пример:

public class person
{
    public String Name {get;set;}
}

public static class FactoryStatic
{
    public static person Create(string name)
    {
        return new person() {Name =name};
    }
}

public class FactoryNoneStatic
{
    public static person Create(string name)
    {
        return new person() {Name =name};
    }
}

Мой вопрос: в чем разница между этими двумя фабричными классами и когда их использовать?

Ответы [ 6 ]

3 голосов
/ 30 сентября 2011

Для непосредственного использования, создания объекта Person, нет никакой разницы.

Однако возможно создать экземпляр FactoryNoneStatic, что, вероятно, нежелательно.

Помечая класс как static, вы четко понимаете свое намерение и предотвращаете неправильное использование класса.

Так что в этой ситуации используйте static class FactoryStatic.

3 голосов
/ 30 сентября 2011

Статический класс может содержать только статические члены.Таким образом, вы не можете создать экземпляр статического класса.

1 голос
/ 30 сентября 2011

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

Есть одна ситуация, в которой я знаю, что вы должны использовать класс static, это то, что методы расширения разрешены только в static классах

Что касается того, когда их использовать, если класс содержит только статические члены, пометьте class как static, чтобы сделать это очевидным. Могут быть некоторые незначительные различия в производительности, но я бы посчитал их незначительными.

1 голос
/ 30 сентября 2011

Класс может быть объявлен статическим, указывая, что он содержит только статические члены. Невозможно создать экземпляры статического Класс с использованием нового ключевого слова. Статические классы загружаются автоматически общеязыковой средой .NET Framework (CLR), когда программа или загружено пространство имен, содержащее класс.

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

Основные характеристики статического класса:

Они содержат только статические элементы.

Они не могут быть созданы.

Они запечатаны.

Они не могут содержать конструкторы экземпляров.

Статический метод, поле, свойство или событие можно вызвать в классе даже когда ни один экземпляр класса не был создан. Если какие-либо случаи класс создан, их нельзя использовать для доступа к статическому член. Существует только одна копия статических полей и событий и статическая методы и свойства могут обращаться только к статическим полям и статическим События. Статические члены часто используются для представления данных или расчеты, которые не меняются в зависимости от состояния объекта; за Например, математическая библиотека может содержать статические методы для расчета синус и косинус.

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

Если у вас есть статические члены нестатического класса, вы все равно хотите поддерживать состояние этого объекта (или, по крайней мере, нести его экземпляр), но некоторые относящиеся к нему методы могут быть вызваны без создания экземпляра класса.

0 голосов
/ 20 июня 2013

Просто статический класс не может быть создан, например:

public static class StaticClass
{
    public static void Function()
    { /* */ }
}

Вы не можете делать так:

StaticClass sc = new StaticClass();

Вы сделаете это так:

StaticClass.Function();
0 голосов
/ 30 сентября 2011

Статический класс может содержать только статические члены. Кроме того, невозможно создать экземпляры статического класса, используя ключевое слово new.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...