Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Статика в C#

Anna | 17.06.2014 | нет комментариев

Волею судьбы в последние годы у меня возникло ещё одно дюже интересное хобби – учить. Я занимаюсь обучением людей, которые хотят стать программистами C#. Люди приходят различные: технари, гуманитарии, кто-то по своей свободе, кого-то направляют от организаций. Не смотря на разные ярусы, мне необходимо их обучать. Следственно я усердствую непрерывно обновлять и улучшать свои обучающие материалы. В связи с чем, пришёл к итогу: «А не нехорошо было бы оформить материалы в текстовом виде, Дабы ими было комфортно пользоваться». Под катом я выложил как пример одну из незадолго оформленных лекций.

Всеобщая доктрина

Перво на перво, следует разобраться что же такое статика. В C# есть ключевое слово static, которое дозволено использовать к:

  • полям
  • свойствам
  • способам
  • операторам
  • событиям
  • конструктору
  • классам
static class OneHuman
{
    public static string Name { get; set; }
    public static int Age { get; set; }

    public static string GetInformation()
    {
            return string.Format("{0} is {1} years old", Name, Age);
    }
}

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

class Program
{
    static void Main(string[] args)
    {
            OneHuman.Name = "Onizuka";
            OneHuman.Age = 22;

            Console.WriteLine(OneHuman.GetInformation());
    }
}

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

class Box
{
    public static string DefaultContext { get; set; }

    public string Context { get; set; }
}

Если каждый класс является статическим:

  • Невозможно создавать экземпляр класса, применяя ключевое слово new.
  • Не разрешается применять не статические члены этого же класса.
  • Он не поддерживает наследование.
  • Немыслимо перегрузить способы.

Если класс не является статическим, но содержит статические способы, то на эти способы распространяются следующие ограничения:

  • Не разрешается применять не статические члены этого же класса из статических. Безусловно же, вам никто не мешает сделать экземпляр класса в статическом способе.
  • Наследование и полиморфизм для статических членов не поддерживаются.
Огромнее деталей

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

class Box
{
    static Box()
    {
            Console.WriteLine("static ctor was called");
    }

    public Box()
    {
            Console.WriteLine("default ctor was calleds");
    }

    public static string Data { get { return "You are trying to get data"; } }

    public const int Foo = 7;
}

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

class Program
{
    static void Main(string[] args)
    {
        var data = Box.Data;
        var box = new Box();
    }
}

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


class Program
{
    static void Main(string[] args)
    {
            var data = Box.Foo;
    }
}

В данном случае вызов статического конструктора не происходит.

 

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB