|
|||||||||||||||||||||||||||||||||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Абстрактный базовый класс FileSystemInfoКлассы DirectoryInfo и FileInfo получают много методов от абстрактного класса FileSystemInfo. Элементы класса FileSystemInfo в основном используются для получения общих характеристик (таких, как время создания, различные атрибуты и т.д.) о конкретном файле или папке. Таблица 9.1.
№5 Класс Encoding. Пример: using System; using System.Text;
class Example { static void Main() { string unicodeString = "This string contains the unicode character Pi (\u03a0)"; Encoding ascii = Encoding.ASCII; Encoding unicode = Encoding.Unicode; byte[] unicodeBytes = unicode.GetBytes(unicodeString); byte[] asciiBytes = Encoding.Convert(unicode, ascii, unicodeBytes); char[] asciiChars = new char[ascii.GetCharCount(asciiBytes, 0, asciiBytes.Length)]; ascii.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0); string asciiString = new string(asciiChars); Console.WriteLine("Original string: {0}", unicodeString); Console.WriteLine("Ascii converted string: {0}", asciiString); } } Представляет собой кодировку символов. Пространство имен: System.Text Конструкторы: Encoding() - Инициализирует новый экземпляр класса Encoding. Encoding(Int32) - Инициализирует новый экземпляр класса Encoding, соответствующий заданной кодовой странице. Синтаксис: [SerializableAttribute][ComVisibleAttribute(true)] public abstract class Encoding: ICloneable
№6 Файлы и потоки. Основные методы для работы с файлами (System.IO.FileStream, System.IO.StreamWriter, System.IO.StreamReader, System.IO.BinaryWriter, System.IO.BinaryReader) Для того, чтобы не только получать информацию о файлах и вы-полнять с ним разные операции (например, создание, копирование, пе-ремещение и удаление), а также читать или записывать данные в файлы, используется понятие «поток» (stream). В области ввода/вывода данных, поток представляется виде пор-ции данных передаваемых между источником и получателем. Потоки предоставляют общий способ взаимодействия с последовательностью байт, независимо от того, какой тип устройства (файл, сетевое соедине-ние, принтер и т.п.) хранит или отображает эти байты. Абстрактный класс System.IO.Stream определяет набор элементов, предоставляю-щих поддержку разных типов взаимодействия с устройствами хранения данных (например, некоторый файл или участок памяти). Классы, производные от абстрактного базового класса Stream (рис. 9.1) представляют данные в виде необработанного потока байт, поэтому работа напрямую с ними достаточно трудоемка. Некоторые классы производные от Stream поддерживают поиск, т.е. выполняют определение и изменение текущей позиции в потоке. Основные элемен-ты класса Stream, показаны в табл. 9.6.
Для работы с файлами на основе абстрактного класса Stream реа-лизован класс FileStream, который определяет методы наиболее под-ходящие для работы с файлами. Это достаточно простой поток, который может только читать и писать один или массив байт. При составлении программ этот класс используется редко, чаще используются различные потоки, основанные на классе FileStream, такие как StreamWriter и StreamReader для работы с текстовыми данными, а также Binary-Writer и BinaryReader для работы с бинарными данными.
№7 Сериализация и десериализация объектов классов (BinaryFormatter) BinaryFormatter: Сериализует и десериализует объект или весь граф связанных объектов в двоичном формате. Пространство имен: System.Runtime.Serialization.Formatters.Binary Синтаксис: [ComVisibleAttribute(true)]public sealed class BinaryFormatter:IRemotingFormatter,IFormatter Конструкторы: BinaryFormatter() - Инициализирует новый экземпляр класса BinaryFormatter значениями по умолчанию. BinaryFormatter(ISurrogateSelector, StreamingContext) - Инициализирует новый экземпляр класса BinaryFormatter с заданными суррогатным селектором и потоковым контекстом. Методы: Deserialize(Stream) Десериализует заданный поток в граф объекта. Deserialize(Stream, HeaderHandler) Десериализует заданный поток в граф объекта.Предоставленный HeaderHandler обрабатывает любые заголовки в этом потоке. DeserializeMethodResponse Десериализует ответ удаленному вызову метода от предоставленного Stream. Equals(Object) Определяет, равен ли заданный объект текущему объекту. (Унаследовано от Object.) GetHashCode Играет роль хэш-функции для определенного типа. (Унаследовано от Object.) GetType Возвращает объект Type для текущего экземпляра. (Унаследовано от Object.) Serialize(Stream, Object) Сериализует объект или граф объектов с указанной вершиной (корнем) в заданный поток. Serialize(Stream, Object, Header[])Сериализует объект или граф объектов с указанной вершиной (корнем) в заданный поток, присоединяя предоставленные заголовки. ToString Возвращает строку, которая представляет текущий объект. (Унаследовано от Object.) UnsafeDeserialize Десериализует заданный поток в граф объекта.Предоставленный HeaderHandler обрабатывает любые заголовки в этом потоке. UnsafeDeserializeMethodResponse Десериализует ответ удаленному вызову метода от предоставленного Stream. №8 Язык интегрированных запросов LINQ (операции ограничения, проекции, разбиения, конкатенации, упорядочивания, соединения, группировки, множества, преобразования и генерации). Language Integrated Query (LINQ) — проектMicrosoft по добавлению синтаксиса языка запросов, напоминающего SQL, в языки программирования платформы.NET Framework. Представляет собой не что иное, какфункциональное программирование, замаскированное под синтаксис SQL[1]. Особенности языка Используя некоторые новые особенности языка, LINQ позволяет использовать SQL-подобный синтаксис непосредственно в коде программы, написанной, например, на языке C#:Анонимные типы Методы расширения Лямбда-исчисление Дерево выражений Стандартные операторы языка запросов Источники данных. Изначально поддерживая механизм запросов для коллекций объектов в памяти, реляционных баз данных и данных в формате XML, LINQ обладает расширяемой архитектурой, которая позволяет сторонним разработчикам реализовать доступ к их хранилищам данных через механизм LINQ. Для этого необходимо реализовать стандартные операторы запросов, используя методы расширения, или реализовать интерфейс IQueryable, позволяющий разбирать дерево выражения во время выполнения, транслируя его в свой язык запросов. В сообществе существует пример пользовательской реализации стандартных операторов запросов.[2] Например, LINQ для SQL (бывший DLinq), который преобразует LINQ-выражения в SQL-запросы к базе данных, использует возможности компилятора для построения дерева выражений, основываясь на контексте программы, а не создавая делегаты функций. Получив дерево выражения, описывающее запрос, специализированный провайдер базы данных может его проанализировать и преобразовать в запрос на подходящем языке для базы данных, например Microsoft SQL Server, Jet (которая используется в Microsoft Access) или любой другой. Некоторые энтузиасты при помощи подобной тактики уже создали для проверки концепции LINQ библиотеки для запросов к WMI[3], RSS, LDAP[4], коллекциям данных ADO.NET, Amazon Web Services[5] и SharePoint[6]. Существующая предварительная версия от Microsoft также включает в себя реализацию LINQ для XML (ранее называвшуюся XLinq), которая значительно упрощает построение XML документа и извлечение данных из него, используя похожие подходы. Кроме того, Microsoft работает над ADO.NET vNext, также известным как LINQ to Entities. LINQ к SQL В конце 2008 года ответственность за разработку LINQ к SQL наряду с ADO.NET Entity Framework (в том числе и LINQ к Entities) была переложена на команду, занимавшуюся развитием ADO.NET (т. н. ADO.NET team), тогда как ранее развитием LINQ к SQL занималась команда, связанная с разработкой компилятора для языка C#[7]. Таким образом, стало очевидно, что оба решения нацелены на решение одних и тех же задач, а следовательно будут конкурировать друг с другом. Немного позднее Тим Маллалью разъяснил, что Microsoft продолжит разработку LINQ к SQL на основе пользовательских отзывов. Однако, начиная с версии платформы.NET 4.0, рекомендованным решением становится именно LINQ к Entities. Кроме того, на основании информации, полученной от пользователей, наиболее употребляемые возможности LINQ к SQL будут добавлены и в LINQ к Entities[8]. В результате чего произойдет постепенное слияние решений.
Эксперты в основном поддержали данное решение. Так, например, Марко Руссо хотя и оговорился, что переходить к LINQ к Entities стоит не раньше, чем оно превратится в полноценную замену LINQ к SQL, тем не менее заявил, что объединение двух частично перекрывающих друг друга фреймворков — хорошая идея, но при этом не должны пострадать те пользователи, которые привыкли пользоваться «отбрасываемыми» частями решений[7]
SQLMetal. Библиотека LINQ включает в себя инструмент SQLMetal, который позволяет автоматически генерировать классы непосредственно из поддерживаемых.NET Framework баз данных, что дает возможность очень быстро и просто интегрировать в код сущности базы данных. Альтернативой является входящий в состав Visual Studio реляционный конструктор объектов, однако он может быть использован только вместе с Microsoft SQL Server. // тип Northwind — это наследник DataContext, созданный SQLMetal // тип Northwind.Orders — Table<Order> // тип Northwind.Customers — Table<Customer>
Northwind db = new Northwind(connectionString);
// используется ключевое слово 'var', так как не существует имени у типа, // к которому принадлежит результат запроса
var q = from o in db.Orders from c in db.Customers where o.Quality == "200" && (o.CustomerID == c.CustomerID) select new { o.DueDate, c.CompanyName, c.ItemID, c.ItemName }; // q ссылается на объект типа IEnumerable<T>, где T — анонимный тип, // генерируемый компилятором foreach (var t in q) { // t является строго типизированным, хоть у его типа и отсутствует имя, // известное при написании кода Console.WriteLine("DueDate Type = {0}", t.DueDate.GetType()); Console.WriteLine("CompanyName (lowercased) = {0}", t.CompanyName.ToLower()); Console.WriteLine("ItemID * 2 = {0}", t.ItemID * 2); Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.008 сек.) |