Вход/Регистрация
C# для профессионалов. Том II
вернуться

Ватсон Карли

Шрифт:

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
Нельзя создавать экземпляры абстрактных классов. Производные классы, которые их расширяют, должны реализовать все абстрактные методы класса, и модификатор
sealed
нельзя применять к этим классам.
sealed
Используется для предотвращения случайного наследования, так как от класса, определенного как
sealed
, нельзя наследовать.
Модификатор члена Цель Эквивалент в Java Описание
virtual
Методы, методы доступа недоступно Позволяет переопределять целевые члены классам-наследникам.
static
Все
static
Целевой член, помеченный как
static
, принадлежит классу, а не экземпляру этого класса. Поэтому не требуется создавать экземпляр класса, чтобы получить к нему доступ.
event
Поля, свойства недоступно Используемый для связывания клиентского кода с событиями класса, модификатор
event
позволяет определить делегата, который будет вызываться, когда в коде произойдет некоторое "событие". Отметим, что программист класса определяет, где и когда инициируется событие, а подписчик определяет, как его обработать.
abstract
Методы, методы доступа
abstract
Указывает, что целевой член является неявно виртуальным и не имеет кода реализации. Производный класс должен предоставить эту реализацию, при этом реализованный метод помечается как
override
.
const
Поля, локальные переменные
final
Указывает, что целевой член не может быть изменен. Java также имеет ключевое слово
const
, которое в данный момент является просто зарезервированным словом.
readonly
Поля недоступно Указывает, что целевому члену можно присвоить значение только при его объявлении или в конструкторе класса, содержащего этот член.
extern
Методы недоступно Указывает, что целевой член реализуется внешне. Этот модификатор обычно используется с атрибутом
DllImport
.
override
Методы недоступно Указывает, что целевой член предоставляет новую реализацию члена, унаследованного из базового класса.
  • Читать дальше
  • 1
  • ...
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • 265
  • 266
  • 267
  • 268
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: