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

Почему статический конструктор не имеет параметров?

По MSDN:

Статический конструктор не принимает модификаторы доступа и не имеет параметров.

Статический конструктор вызывается автоматически для инициализации класса перед созданием первого экземпляра или ссылками на любые статические члены.

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

Можно ли объяснить, почему статический конструктор не может иметь параметры?

4b9b3361

Ответ 1

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

Если CLR должен вызвать статический конструктор, как он узнает, какие параметры передать его?

Ответ 2

Статические конструкторы вызываются автоматически как часть инициализации типа. Они не вызываются явно... так что нигде вы не могли бы предоставить какие-либо аргументы, соответствующие параметрам конструктора. Почему вы хотите разрешить параметры, если вы не можете указать какие-либо значения для аргументов?

Ответ 3

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

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

Ответ 4

Потому что вы не можете вызвать его напрямую (согласно MSDN):

Статический конструктор нельзя вызвать напрямую.

Ответ 5

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

Ответ 6

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

Ответ 7

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

статический класс:

static class DataB
{
    static DataB(){}

    public static void funcWithParams(string st)
    {...}
}

вы можете создать его так:

DataB.funcWithParams("some string");

Ответ 8

Статический конструктор

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

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

Итак, у нас должен быть параметр less static constructor.

Ответ 9

Вот пример метода, позволяющего вложенным классам получать доступ к элементам управления формы БЕЗ ПРОПУСКА ФОРМЫ КАК ПАРАМЕТР К КОНСТРУКТОРУ НЕСТАЦИОННОГО КЛАССА:

public partial class Form1 : Form
{
    public int nWow;

    public Form1()
    {
        InitializeComponent();
        Inner.AssignMe(this); // This is where the real action is.
    }

    class Inner
    {
        static Form1 Me;

        static Inner(){} // empty static constructor necessary

           // Called AssignMe in the Form1 constructor in this code, 
           // but this can be generalized to any nested class.
        public static void AssignMe(Form1 form) { Me = form; }

        public Inner() { Me.nWow = 1; } // Now u can access public Form1
    }                        // members and methods even from the nested
}                            // class' constructor.

Я понял это исходя из сообщения user3567816 выше, которое, хотя и краткое и имеющее 0 голосов, никогда не является тем самым самым элегантным решением и очень уникальным. Никто другой не дает этого совета этому вопросу. НИКАКИЕ БОЛЬШЕ НЕОБХОДИМО УЛЬТРАФИОЛЕТОВЫЕ ПАРАМЕТРЫ ФОРМЫ В КОНСТРУКТОРЕ НЕИСПРАВНОСТЕЙ КЛАССА! Это абсолютно блестяще!!

Я не мог не дать твист VB.Net с использованием статической переменной Me. Ухмылка.