Секреты LINQ. Автогенерируемые свойства. Инициализаторы объектов и коллекций

Страницы работы

32 страницы (Word-файл)

Содержание работы

Секреты LINQ

Файл:Chernosvitov1.gif

Язык С#, в отличие от C++, не стоит на месте.

Команда Anders Hejlsberg'а (автора языка С#), Microsoft продолжает обновлять и шлифовать его.

Технология LINQ (Language Integrated Queries) вплотную подошла к функциональному программированию. Она пользуется функциями (точнее, делегатами — обобщенным понятием указателей на функции) так же, как языки императивного программирования пользуются переменными числовых типов. Такие языки, как LINQ, SQL, XQuery, являются декларативными, они описывают цель запроса. В то же время, языки программирования вида: C++, C#, Java, PL/I, Ruby, Python являются императивными. Они описывают серию шагов, необходимых для достижения цели.

На мой взгляд, уместны следующие аналогии.

¨  Фундаментальная алгебра определяется как совокупность двух множеств: A = <R, O>, где R — множество объектов,  O — множество операций над ними. Например, алгебра вещественных чисел — это совокупность <R, O>, где R — множество чисел,  O — множество операций: {+,–,/,▪ }.

¨  Класс, используемый в объектно-ориентированном программировании, — это также совокупность двух множеств: C = <D, M>, где D — множество данных класса, M — множество методов, с помощью которых производятся манипуляции с данными. Аналогия с алгеброй очевидна.

¨  Некоторые разделы элементарной математики оперируют множествами чисел (целых, рациональных, вещественных). Некоторые разделы высшей математики оперируют множествами функций (непрерывных, разрывных, от одного или множества вещественных, или комплексных аргументов).

¨  Программирование (как структурное, так и объектно-ориентированное) относится к функциональному программированию так же, как элементарная математика — к высшей. Это утверждение менее очевидно, но в нем есть доля правды, так как в функциональном программировании мы оперируем функциями так же, как мы оперируем данными в структурном и ОО программировании.

Технология LINQ использует λ-выражения (Lambda Expressions) и деревья выражений (Expression Trees) — понятия, которые появились в функциональном программировании. Деревья выражений пытаются представить код в виде древовидных структур данных. Каждым узлом такого дерева является выражение (Expression), роль которого может выполнять функция, или оператор языка C#. Управляя узлами дерева выражений, можно генерировать λ-выражения, которые широко используются при построении интегрированных запросов к источникам данных различной природы. Роль источника данных LINQ может играть: любая перечислимая структура данных (коллекция), Web-service, XML-файл, или реальная база данных.

Расширения языка C#

Технология LINQ опирается на расширения языка C#, которые были введены в C#, версии 3.0. В следующей версии (.NET Framework 3.5) для поддержки LINQ появились новые классы. В Visual Studio 2008 появились новые шаблоны проектов и средства разработки кода, а в языке C# — новые ключевые слова и синтаксические конструкции. Вначале (.Net Framework 1.0) язык C# имел 77 ключевых слов. Вот они.

abstract

as

base

bool

break

byte

case

catch

char

checked

class

const

continue

decimal

default

delegate

do

double

else

enum

event

explicit

extern

false

finally

fixed

float

for

foreach

goto

if

implicit

in

int

interface

internal

is

lock

long

namespace

new

null

object

operator

out

override

params

private

protected

public

readonly

ref

return

sbyte

sealed

short

sizeof

stackalloc

static

string

struct

switch

this

throw

true

try

typeof

uint

ulong

unchecked

unsafe

ushort

using

virtual

volatile

void

while

Для сравнения напомню, что С++ располагает 44 ключевыми словами. Теперь (в .Net Framework 3.5), кроме указанных 77 слов, в языке C# присутствуют 24 контекстных ключевых слова (Contextual Keywords). Вот они.

add

ascending

by

descending

equals

from

get

global

group

into

join

let

on

orderby

partial (type)

partial (method)

remove

select

set

value

var

where (generic type constraint)

where (query clause)

yield

Похожие материалы

Информация о работе