запись встречи от 21/02/2012

Содержание
var
yield
system.collections
статические конструкторы
статические классы
Matlab как инструмент документирования алгоритма
ресурсы в WPF
зачем придумали XAML


  • var (см. также msdn)
Ключевое слово "var" позволяет компилятору C# автоматически на этапе компиляции выводить тип переменной. Т.е., например, вместо длинного
ArrayList a = new ArrayList();
можно писать так:
var a = new ArrayList();
Компилятор "догадывается" о типе переменной "a" по правой части выражения.
Использование "var" делает код более лаконичным. Иногда, впрочем, это может привести к видимой неоднозначности:
var b = SomeStrangeOldProcedure();
Какой тип у переменной "b" компилятор определяет по типу возвращаемого значения метода SomeStrangeOldProcedure. Однако наглядность кода при этом теряется.

  • yield (см. также msdn)
оператор yield позволяет создавать перечисляемые объекты. По умолчанию массивы в C# являются перечисляемыми:
var xs = new int[]{1,2,3,4};
foreach(int x in xs) {
    System.Console.Out.WriteLine(x);
}
На экране мы последовательно увидим "1", "2", "3" и "4".
Обратите внимание, что код на второй строке можно записать и так:
foreach (var x in xs) {
Использование ключевого слова var позволяет не указывать тип переменной, т.к. он однозначно выводится из типа перечисляемого массива xs.

Для того же, чтобы можно было использовать в перечислении объект нашего класса, необходимо определить в классе метод GetEnumerator:
class X {
    public System.Collections.IEnumerator GetEnumerator() {
        yield return 1;
        yield return 2;
        for(int i=5; i<7; ++i) {
            yield return i;
        }
    }
}
Можно сказать, что конструкция "yield return" возвращает результат вычисления метода, а при следующем вызове метода вычисление происходит со следующей строчки.
Пример использования нашего перечисляемого класса:
var xs  = new X();
foreach(var x in xs) {
    System.Console.Out.WriteLine(x);
}
На экране мы последовательно увидим "1", "2", "5" и "6".

  • system.collections (см. также msdn)
Коллекции в .net - структуры данных. В пространстве имен System.Collections определены многие распространенные структуры данных. Обобщенные (generic) коллекции находятся в пространстве имен System.Collections.Generic, коллекции для многопоточных приложений - в System.Collections.Parallel.
Разницу между обобщенными и необобщенными коллекциями можно увидеть на примере:
var a = new ArrayList();
a.Add("abc");
a.Add(12);
a.Add(4.17);
Необобщенные коллекции позволяют хранить элементы произвольного типа.

var b = new List<int>();
b.Add(1);
// b.Add("abc"); --> ошибка компиляции! допустимы только целочисленные значения
Обобщенные же коллекции строго типизированы определенным типом ("int" в данном примере).

  • статические конструкторы (см. также msdn)
Статический конструктор выполняется однажды при создании экземпляров класса и используется, как правило, для инициализации статических полей класса. Пример класса со статическим конструктором:
class A
{
    public static int x;
    static A()
    {
        System.Console.Out.WriteLine("static");
        x = 42;
    }
    public A()
    {
        System.Console.Out.WriteLine("non-static");
    }
}

Пример использования:
System.Console.Out.WriteLine("pre-create");
var xx = new A();
System.Console.Out.WriteLine(A.x);
xx = new A();

На экране мы увидим следующее:
pre-create
static
non-static
42
non-static

  • статические классы (см. также на msdn)
Статические классы предназначены для создание модулей в процедурном стиле. Статические классы не могут наследовать или наследоваться, не могут иметь конструкторов и нестатических членов класса. Примером такого класса может быть математический модуль:
public static class Math {
    public static double Pi = 3.14;
    public static double tg(double x) {
        return sin(x)/cos(x);
    }
    public static double ctg(double x) {
        return cos(x)/sin(x);
    }
}

Пример использования статического класса:
double x = Math.tg(Math.Pi);
// var a = new Math(); --> ошибка компиляции! у статических классов не может быть экземпляров

  • Matlab как инструмент документирования алгоритма
см. соответствующую вики-статью и статью на википедии

  • ресурсы в WPF (см. также на msdn)
см. соответствующий раздел на ИНТУИТ (доступно после регистрации). Зачем использовать ресурсы: локализация; разделение графического представления интерфейса от текстового (для технических писателей, например); использование общей библиотеки стилей

  • зачем придумали XAML
см. статью на ИНТУИТ (доступно после регистрации), статью на википедии, раздел на msdn

Last edited Jun 26, 2012 at 12:47 PM by basph, version 20

Comments

No comments yet.