Car greenFordExpedition = new Car(0, 4, 2);

 Console.WriteLine('initial: ' + greenFordExpedition);

 greenFordExpedition += total;

 Console.WriteLine('after add: ' + greenFordExpedition);

 greenFordExpedition -= front;

 Console.WriteLine('after subtract: ' + greenFordExpedition);

}

Компиляция и выполнение этого кода создадут приведенные ниже результаты:

initial:        CAR-[wheels = 0| doors = 4| headlights = 2 ]

after add:      CAR-[wheels = 6| doors = 4| headlights = 2 ]

after subtract: CAR-[wheels = 4| doors = 4| headlights = 2 ]

sizeof и typeof

Так как Java не имеет других типов данных значений, кроме примитивных, размер которых всегда известен, то реального применения для оператора sizeof нет. В C# типы данных значений охватывают примитивные типы, а также структуры и перечисления. Конечно, как и в Java, размер примитивных типов известен. Однако необходимо знать, сколько пространства занимает тип struct или enum, для чего служит оператор sizeof. Синтаксис достаточно простой: sizeof(<Value Type>), где <Value Type> будет struct или enum. Необходимо отметить один момент при использовании оператора sizeof — он может использоваться только в ненадежном контексте. Оператор sizeof не может быть перезагружен.

Оператор typeof используется для получения объекта типа экземпляра типа без создания экземпляра типа. В Java каждый тип имеет переменную класса public static, которая возвращает дескриптор объекта Class, ассоциированный с этим классом. Оператор typeof предоставляет функциональность этого типа. Так же как в случае sizeof, синтаксис будет очень простым: typeof(<Type>), где <Type> является любым типом, определенным пользователем, который вернет объект типа этого типа.

Делегаты

Делегаты являются членами пространства имен, которые инкапсулируют ссылку на метод внутри объекта делегата. Объект делегата может затем передаваться в код, вызывающий указанный метод, не зная во время компиляции, какой метод будет вызван. Красоту, мощь и гибкость делегатов можно увидеть только с помощью примера. Давайте посмотрим, как работают делегаты:

namespace Samples {

 using System;

 using System.Collections;

 public delegate void TestDelegate(string k); // определяет делегата,

  // который получает строку в качестве аргумента

 public class Sample {

  public Sample() {}

  public void test(string i) {

   Console.WriteLine(i + ' has been invoked.');

  }

  public void text2(string j) {

   Console.WriteLine('this is another way to invoke {0}' + j);

  }

  public static void Main(string[] args) {

   Sample sm = new Sample();

   TestDelegate aDelegate = new TestDelegate(sm.test);

   TestDelegate anotherDelegate = new TestDelegate(sm.test2);

   aDelegate('test');

   anotherDelegate('test2');

  }

 }

}

Первый шаг по использованию делегатов состоит в определении делегата. Наш тестовый делегат определяется в строке public delegate void TestDelegate(string k); . Затем определяется класс с методами, которые имеют сигнатуру, аналогичную делегату. Конечный шаг заключается в создании экземпляра делегата который создается так же, как экземпляр класса и реализуется с помощью оператора new. Единственное различие состоит в том, что имя целевого метода передается делегату как аргумент. Затем вызывается делегат. В примере вызывается экземпляр aDelegate с помощью вызова aDelegate('test');.

Подробно о классах

Как в Java, как и в C#, класс является скелетом, который содержит методы, но не данные. Это структура потенциального объекта. Образование экземпляра класса создает объект на основе этой структуры. Существуют различные ключевые слова и концепции, связанные с классами, которые, были рассмотрены ранее. В этом разделе мы повторим эти ключевые слова и введем новые.

Модификаторы

Как и в Java, модификаторы в C# используются для модификации объявлений типа и членов. Далее представлен список модификаторов C#. Более подробное определение значений отдельных идентификаторов дано в разделе о ключевых словах данного приложения. Однако некоторые из перечисленных модификаторов являются новыми и будут рассмотрены в ближайших разделах.

Модификатор класса Описание
abstract Нельзя создавать экземпляры абстрактных классов. Производные классы, которые их
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

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

Отметить Добавить цитату