Как вызвать статический конструктор внутри статического класса в С#

-4

Я новичок в С#. Пожалуйста, помогите мне найти решение этой проблемы. У меня есть статический класс A. Внутри этого у меня есть статический конструктор. Код ниже:

using System; 
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication6
{
class Program
{
static void Main(string[] args)
{
}
}
static class A
{
static A()
{
//Console.WriteLine("static constructor is called.");
}
}
}

Как я могу получить доступ к этому статическому конструктору в С#?

спросил(а) 2021-01-25T17:41:49+03:00 4 месяца, 2 недели назад
1
Решение
76

Вы не можете. Как написано в статье MSDN о статических классах:

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

Также я предлагаю вам прочитать эту статью тоже

Статические конструкторы (Руководство по программированию на С#)

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

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

Статические конструкторы обладают следующими свойствами:

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

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

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

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

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

using System; 
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication6
{
public class Program
{
public static void Main(string[] args)
{
A myClass1WithStaticConstructor = new A();
A myClass2WithStaticConstructor = new A();
}
}
public class A
{
public A()
{
Console.WriteLine("default constructor is called.");
}
static A()
{
Console.WriteLine("static constructor is called.");
}
}
}

И выход будет следующим:

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

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

Также, если вы хотите использовать его со статическим классом, вот пример:

using System; 
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication6
{
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine(A.abc);
}
}
public static class A
{
public static int abc;

static A()
{
abc=10;
Console.WriteLine("static constructor is called.");
}
}
}

Выход будет следующим:

вызывается статический конструктор.
10

Таким образом, мы видим, что статический конструктор автоматически вызывается и в этом случае.

ответил(а) 2021-01-25T17:41:49+03:00 4 месяца, 2 недели назад
-4

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

ответил(а) 2021-01-25T17:41:49+03:00 4 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема