КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
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#.
Объектная модель – это совокупность основополагающих принципов, лежащих в основе объектно-ориентированного проектирования; парадигма программирования, основанная на принципах абстрагирования, инкапсуляции, модульности, иерархичности, типизации, параллелизма и устойчивости.
|