Каково различие между статическим классом и нормальным классом?

Когда я должен предпочесть или помехи или нормальный класс? Или: каково различие между ними?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace staticmethodlar
{
    class Program
    {
        static void Main(string[] args)
        {
            SinifA.method1();
        }
    }

    static class SinifA 
    {
       public static void method1()
        {
            Console.WriteLine("Deneme1");
        }
    }

    public static class SinifB
    {
        public static void method2()
        {
            Console.WriteLine("Deneme2");
        }
    }
    public class sinifC
    {
       public void method3()
        {
            Console.WriteLine("Deneme3");
        }
    }

    public class sinifD : sinifC
    {
        void method4()
        {
            Console.WriteLine("Deneme4");
        }

        sinifC sinifc = new sinifC();  // I need to use it :)
    }
}
18
задан Jeroen 4 June 2015 в 06:21
поделиться

9 ответов

Статические классы содержат статические объекты, экземпляры которых невозможно создать несколько раз. Обычно я использую статические классы для размещения статических методов, которые обеспечивают вычисления, общие шаблоны обработки, форматы вывода строк и т. Д. Статические классы легковесны и не нуждаются в создании экземпляров.

Например, System.IO.File - это статический класс со статическим методом Exists () . Вы не создаете объект File для его вызова. Вы вызываете его так

System.IO.File.Exists (filePath)

Вместо этого

System.IO.File myFile = new System.IO.File (filePath);

if ( myFile.Exists ()) {/ * работают * /}

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

public class Product
{

    public int    ProductID   { get; private set; }
    public string ProductName { get; private set; }
    public int    Qty         { get; set; }

    public Product( int productID, string productName, int total )
    {
        this.ProductID = productID;
        this.ProductName = productName;
        this.Qty = total;
    }       
}
30
ответ дан 30 November 2019 в 06:17
поделиться
  • статические классы не могут быть инстанцированы или унаследованы.
  • статические классы помечаются компилятором как sealed и abstract в выходном MSIL.
  • все члены статических классов также должны быть статическими.
  • только статические классы могут содержать методы расширения.
  • статические классы не могут быть использованы в качестве аргументов общих типов.
15
ответ дан 30 November 2019 в 06:17
поделиться

Вы можете создавать экземпляры «нормальных» классов с помощью конструктора классов.

var normal = new Normal();

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

Также стоит отметить, что вы должны объявить методы расширения в статических классах.

4
ответ дан 30 November 2019 в 06:17
поделиться

Из документации MSDN по статическим классам:

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

3
ответ дан 30 November 2019 в 06:17
поделиться

Проще говоря:

статический класс не может быть инстанцирован с помощью ключевого слова new. Все методы в статическом классе должны быть статическими и могут быть вызваны напрямую без инстанцирования.

"Нормальный" класс ДОЛЖЕН быть инстанцирован, однако любые статические методы в "нормальном" классе могут быть вызваны без инстанцирования.

Не статические методы в "нормальном" классе не могут быть вызваны без предварительного инстанцирования содержащего их класса.

1
ответ дан 30 November 2019 в 06:17
поделиться

Нормальный класс - это класс, который можно создать и использовать с объектами.

Статический класс - это класс, который не может быть создан и не может быть расширен.

Это означает, что статический класс является запечатанным и абстрактным по умолчанию, вы можете посмотреть

MSIL-код компилятора статического класса, помещающий запечатанный и абстрактный перед статическим классом.

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

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

их использовать.

A static class is singleton by default.

Статические классы используются для определения методов расширения, потому что вы не хотите

создавать их экземпляры.

Статические классы подобны глобальному поставщику уникальных услуг.

Я надеюсь, что это имеет для вас смысл и поможет вам понять статические классы.

0
ответ дан 30 November 2019 в 06:17
поделиться

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

0
ответ дан 30 November 2019 в 06:17
поделиться

Возможно, вам поможет представление о "статическом" и "экземпляре" в терминах адресации памяти.

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

var result = Math.Pow(3, 3); // static - Math class can't be instanced

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

var Ted = new Employee(); // instance - creates a new object at a new address

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

0
ответ дан 30 November 2019 в 06:17
поделиться

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

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

0
ответ дан 30 November 2019 в 06:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: