Kniga-Online.club
» » » » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Читать бесплатно Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю. Жанр: Базы данных год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:

// Car.cs

using System;

namespace ForEachWithExtensionMethods

{

  class Car

  {

    // Свойства класса Car.

    public int CurrentSpeed {get; set;} = 0;

    public string PetName {get; set;} = "";

    // Конструкторы.

    public Car() {}

    public Car(string name, int speed)

    {

      CurrentSpeed = speed;

      PetName = name;

    }

    // Выяснить, не перегрелся ли двигатель Car.

  }

}

// Garage.cs

namespace ForEachWithExtensionMethods

{

  class Garage

  {

    public Car[] CarsInGarage { get; set; }

    // При запуске заполнить несколькими объектами Car.

    public Garage()

    {

      CarsInGarage = new Car[4];

      CarsInGarage[0] = new Car("Rusty", 30);

      CarsInGarage[1] = new Car("Clunker", 55);

      CarsInGarage[2] = new Car("Zippy", 30);

      CarsInGarage[3] = new Car("Fred", 30);

    }

  }

}

Обратите внимание, что класс Garage не реализует интерфейс IEnumerable и не имеет метода GetEnumerator(). Метод GetEnumerator() добавляется через показанный ниже класс GarageExtensions:

namespace ForEachWithExtensionMethods

{

  static class GarageExtensions

  {

    public static IEnumerator GetEnumerator(this Garage g)

        => g.CarsInGarage.GetEnumerator();

  }

}

Код для тестирования этого нового средства будет таким же, как код, который применялся для тестирования метода GetEnumerator() в главе 8. Модифицируйте файл Program.cs следующим образом:

using System;

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

using ForEachWithExtensionMethods;

Console.WriteLine("***** Support for Extension Method GetEnumerator *****n");

Garage carLot = new Garage();

// Проход по всем объектам Car в коллекции?

foreach (Car c in carLot)

{

    Console.WriteLine("{0} is going {1} MPH",

        c.PetName, c.CurrentSpeed);

}

Вы увидите, что код работает, успешно выводя на консоль список объектов автомобилей и скоростей их движения:

***** Support for Extension Method GetEnumerator *****

Rusty is going 30 MPH

Clunker is going 55 MPH

Zippy is going 30 MPH

Fred is going 30 MPH

На заметку! Потенциальный недостаток нового средства заключается в том, что теперь с оператором foreach могут использоваться даже те классы, которые для этого не предназначались.

Понятие анонимных типов

Программистам на объектно-ориентированных языках хорошо известны преимущества определения классов для представления состояния и функциональности заданного элемента, который требуется моделировать. Всякий раз, когда необходимо определить класс, предназначенный для многократного применения и предоставляющий обширную функциональность через набор методов, событий, свойств и специальных конструкторов, устоявшаяся практика предусматривает создание нового класса С#.

Тем не менее, возникают и другие ситуации, когда желательно определять класс просто в целях моделирования набора инкапсулированных (и каким-то образом связанных) элементов данных безо всяких ассоциированных методов, событий или другой специализированной функциональности. Кроме того, что если такой тип должен использоваться только небольшим набором методов внутри программы? Было бы довольно утомительно строить полное определение класса вроде показанного ниже, если хорошо известно, что класс будет применяться только в нескольких местах. Чтобы подчеркнуть данный момент, вот примерный план того, что может понадобиться делать, когда нужно создать "простой" тип данных, который следует обычной семантике на основе значений:

class SomeClass

{

// Определить набор закрытых переменных-членов...

// Создать свойство для каждой закрытой переменной-члена...

// Переопределить метод ToStringO для учета основных

// переменных-членов...

// Переопределить методы GetHashCode() и Equals() для работы

// с эквивалентностью на основе значений...

}

Как видите, задача не обязательно оказывается настолько простой. Вам потребуется не только написать большой объем кода, но еще и сопровождать дополнительный класс в системе. Для временных данных подобного рода было бы удобно формировать специальный тип на лету. Например, пусть необходимо построить специальный метод, который принимает какой-то набор входных параметров.Такие параметры нужно использовать для создания нового типа данных, который будет применяться внутри области действия метода. Вдобавок желательно иметь возможность быстрого вывода данных с помощью метода ToString() и работы с другими членами System.Object. Всего сказанного можно достичь с помощью синтаксиса анонимных типов.

Перейти на страницу:

Троелсен Эндрю читать все книги автора по порядку

Троелсен Эндрю - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


Язык программирования C#9 и платформа .NET5 отзывы

Отзывы читателей о книге Язык программирования C#9 и платформа .NET5, автор: Троелсен Эндрю. Читайте комментарии и мнения людей о произведении.


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

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*