Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Delegate




Объявление типа делегата аналогично подписи метода. Оно имеет возвращаемое значение и некоторое число параметров какого-либо типа:

 

public delegate void TestDelegate(string message);

public delegate int TestDelegate(MyType m, long num);

 

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

Делегаты аналогичны используемым в языке C++ указателям на функции, но являются строго типизированными и безопасными.

Делегаты являются основой событий.

Экземпляры делегата могут создаваться путем его связывания с именованным или анонимным методом.

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

Для использования с анонимными методами делегат и код, который должен быть связан с ним, должны быть объявлены вместе. В этом разделе рассматриваются оба способа создания экземпляров делегатов.

Пример

// Declare delegate -- defines required signature:

delegate double MathAction(double num);

 

class DelegateTest

{

// Regular method that matches signature:

static double Double(double input)

{

return input * 2;

}

 

static void Main()

{

// Instantiate delegate with named method:

MathAction ma = Double;

 

// Invoke delegate ma:

double multByTwo = ma(4.5);

Console.WriteLine(multByTwo);

 

// Instantiate delegate with anonymous method:

MathAction ma2 = delegate(double input)

{

return input * input;

};

 

double square = ma2(5);

Console.WriteLine(square);

 

// Instantiate delegate with lambda expression

MathAction ma3 = s => s * s * s;

double cube = ma3(4.375);

 

Console.WriteLine(cube);

}

}

 

Object

Тип object представляет собой псевдоним для Object в платформе .NET Framework. В унифицированной системе типов C# все типы, предопределенные и пользовательские, ссылочные типы и типы значений, наследуют непосредственно или косвенно от Object. Переменным типа object можно назначать значения любых типов. Когда переменная типа значения преобразуется в объект, говорят, что она упаковывается. Когда переменная типа object преобразуется в тип значения, говорят, что она распаковывается.

Пример

В следующем примере показывается, как переменные типа object могут принимать значения любого типа данных, а также как переменные типа object могут использовать методы для Object из платформы .NET Framework.

 

class ObjectTest

{

public int i = 10;

}

 

class MainClass2

{

static void Main()

{

object a;

a = 1; // an example of boxing

Console.WriteLine(a);

Console.WriteLine(a.GetType());

Console.WriteLine(a.ToString());

 

a = new ObjectTest();

ObjectTest classRef;

classRef = (ObjectTest)a;

Console.WriteLine(classRef.i);

}

}

 

/* Output

System.Int32

* 10

*/

String

Тип данных string — это последовательность, содержащая ни одного или любое число знаков Юникода. В платформе.NET Framework string является псевдонимом для String.

Несмотря на то, что тип string является ссылочным типом, операторы равенства (== и !=) определены для сравнения значений объектов типа string, а не ссылок. Это упрощает проверку равенства строк. Пример.

string a = "hello";

string b = "h";

// Append to contents of 'b'

b += "ello";

Console.WriteLine(a == b);

Console.WriteLine((object)a == (object)b);

В этом примере отображается "True", а затем "False", поскольку содержимое строк одинаково, но a и b ссылаются на разные экземпляры строк.

Оператор + служит для объединения строк.

 

Строки являются неизменяемыми: содержимое строкового объекта невозможно изменить после создания объекта, хотя из-за синтаксиса изменения кажутся возможными. Например, при написании этого кода компилятор на самом деле создает новый строковый объект для новой последовательности знаков, а переменная b по-прежнему содержит "h".

string b = "h";

b += "ello";

Оператор [] служит для доступа только для чтения к отдельным знакам объекта string.

string str = "test";

char x = str[2]; // x = 's';

 

Строковые литералы имеют тип string и могут быть написаны в двух формах: в кавычках и в кавычках с @. Строковые литералы в кавычках заключены в двойные кавычки (").

"good morning" // a string literal

Строковые литералы могут содержать любые символьные литералы. Escape-последовательности также поддерживаются.

string a = "\\\u0066\n";

Эта строка содержит обратную косую черту, букву f и знак новой строки.

Примечание.

Литералы из точных сток начинаются со знака @ и заключены в двойные кавычки. Пример:

@"good morning" // a string literal

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

@"c:\Docs\Source\a.txt"

Чтобы включить знак двойной кавычки в строку в кавычках с @, следует использовать знак кавычек дважды:

@"""Ahoy!"" cried the captain." // "Ahoy!" cried the captain.

Знак @ также можно применять для использования указанных идентификаторов (/reference), являющихся ключевыми словами C#.

 

Объектная модель – это совокупность основополагающих принципов, лежащих в основе объектно-ориентированного проектирования; парадигма программирования, основанная на принципах абстрагирования, инкапсуляции, модульности, иерархичности, типизации, параллелизма и устойчивости.

 



Поделиться:

Дата добавления: 2015-04-21; просмотров: 66; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты