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

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

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

{

  ...

  throw new CarIsDeadException(

    $"{PetName} has overheated!",

      "You have a lead foot", DateTime.Now)

  {

    HelpLink = "http://www.CarsRUs.com",

  };

  ...

}

Для перехвата такого входного исключения блок catch теперь можно модифицировать, чтобы в нем перехватывался конкретный тип CarIsDeadException (тем не менее, с учетом того, что System.CarIsDeadException "является" System.Exception, по-прежнему допустимо перехватывать System.Exception):

using System;

using CustomException;

Console.WriteLine("***** Fun with Custom Exceptions *****n");

Car myCar = new Car("Rusty", 90);

try

{

  // Отслеживать исключение.

  myCar.Accelerate(50);

}

catch (CarIsDeadException e)

{

  Console.WriteLine(e.Message);

  Console.WriteLine(e.ErrorTimeStamp);

  Console.WriteLine(e.CauseOfError);

}

Console.ReadLine();

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

Построение специальных исключений, способ второй

В текущем классе CarIsDeadException переопределено виртуальное свойство System.Exception.Message с целью конфигурирования специального сообщения об ошибке и предоставлены два специальных свойства для учета дополнительных порций данных. Однако в реальности переопределять виртуальное свойство Message не обязательно, т.к. входное сообщение можно просто передать конструктору родительского класса:

public class CarIsDeadException : ApplicationException

{

  public DateTime ErrorTimeStamp { get; set; }

  public string CauseOfError { get; set; }

  public CarIsDeadException() { }

  // Передача сообщения конструктору родительского класса.

  public CarIsDeadException(string message, string cause, DateTime time)

    :base(message)

  {

    CauseOfError = cause;

    ErrorTimeStamp = time;

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

  }

}

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

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

Построение специальных исключений, способ третий

Если вы хотите создать по-настоящему интересный специальный класс исключения, тогда необходимо обеспечить наличие у класса следующих характеристик:

• он является производным от класса Exception/ApplicationException;

• в нем определен стандартный конструктор;

• в нем определен конструктор, который устанавливает значение унаследованного свойства Message;

• в нем определен конструктор для обработки "внутренних исключений".

Чтобы завершить исследование специальных исключений, ниже приведена последняя версия класса CarIsDeadException, в которой реализованы все упомянутые выше специальные конструкторы (свойства будут такими же, как в предыдущем примере):

public class CarIsDeadException : ApplicationException

{

  private string _messageDetails = String.Empty;

  public DateTime ErrorTimeStamp {get; set;}

  public string CauseOfError {get; set;}

  public CarIsDeadException(){}

  public CarIsDeadException(string cause, DateTime time) :

      this(cause,time,string.Empty)

  {

  }

   public CarIsDeadException(string cause, DateTime time,

                             string message) : this(cause,time,message, null)

  {

  }

    public CarIsDeadException(string cause, DateTime time,

                              string message, System.Exception inner) :

        base(message, inner)

  {

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

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

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


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

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


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

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

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


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