Биты и байты.

Биты и байты.

пятница, 8 мая 2015 г.

Краткий справочник по C#

Операторы C#

В переменных типа значения хранятся данные, а в переменных ссылочного типа хранятся ссылки на фактические данные. 
Ссылочные типы также называются объектами. 

Типы значений состоят из двух основных категорий:
Структуры делятся на следующие категории:
Для объявления ссылочных типов используются следующие ключевые слова:
В C# также предусмотрены следующие встроенные ссылочные типы:
Начиная с версии Visual C# 3.0 объявляемые в области метода переменные могут иметь неявный тип var. 
Локальная переменная с неявным типом имеет строгую типизацию, как если бы тип был задан явно, только тип определяет компилятор. 
Следующие два объявления i функционально являются эквивалентами:
var i = 10; // implicitly typed
int i = 10; //explicitly typed
 
do, for, foreach, in, while

Оператор if
bool condition = true;
if (condition)
{
    Console.WriteLine("The variable is set to true.");
}
else
{
    Console.WriteLine("The variable is set to false.");
}

Оператор switch 
int caseSwitch = 1;
switch (caseSwitch)
{
    case 1:
        Console.WriteLine("Case 1");
        break;
    case 2:
        Console.WriteLine("Case 2");
        break;
    default:
        Console.WriteLine("Default case");
        break;
}

Цикл for
for (int i = 1; i <= 5; i++)
{
   Console.WriteLine(i);
}
 
Цикл foreach
int[] fibarray = new int[] { 0, 1, 1, 2, 3, 5, 8, 13 };
foreach (int element in fibarray)
{
    System.Console.WriteLine(element);
}
System.Console.WriteLine();

В следующей таблице представлен список операторов C#, сгруппированных в порядке приоритета. 
Операторы в каждой группе имеют одинаковый приоритет.

Категория оператора
Операторы
Основные
Унарные
Мультипликативные
Аддитивные
Сдвиг
Относительные и тестирующие тип
Равенство
Логическое И
Логическое ИСКЛЮЧАЮЩЕЕ ИЛИ

Логическое ИЛИ
Условное И
Условное ИЛИ
Поддержка значения NULL
Условный оператор
Присвоение и лямбда-выражение



Методы (Руководство по программированию на C#)

Метод представляет собой блок кода, содержащий набор инструкций. Программа инициирует выполнение операторов, вызывая метод и задавая необходимые аргументы метода. 
В C# все инструкции выполняются в контексте метода. Метод Main является точкой входа для каждого приложения C#, и вызывается он средой CLR при запуске программы.

Сигнатуры метода

Методы объявляются в классе или в структуре путем указания уровня доступа, например public или private, необязательных модификаторов, например abstract или sealed, возвращаемого значения, имени метода и списка параметров этого метода. 
Все вместе эти элементы образуют сигнатуру метода.

Передача параметров

В C# аргументы могут быть переданы параметрам либо по значению, либо по ссылке. Передача по ссылке позволяет изменять и сохранять измененные значения параметров членов функций, методов, свойств, индексаторов, операторов и конструкторов в вызывающей среде. Для передачи параметра по ссылке используйте ключевое слово ref или out. Для простоты в этом примере используется только ключевое слово ref. 
static void SquareIt(int x)
// The parameter x is passed by value.
static void SquareIt(ref int x)
// The parameter x is passed by reference.


Неявно типизированные локальные переменные

// i is compiled as an int
var i = 5;
// s is compiled as a string
var s = "Hello";
// a is compiled as int[]
var a = new[] { 0, 1, 2 };
// expr is compiled as IEnumerable<Customer>
// or perhaps IQueryable<Customer>
var expr =
    from c in customers
    where c.City == "London"
    select c;
// anon is compiled as an anonymous type
var anon = new { Name = "Terry", Age = 34 };
// list is compiled as List<int>                             
var list = new List<int>();

Ключевое слово var можно использовать в следующих контекстах:
в локальных переменных (переменных, объявленных в области действия метода), как показано в предыдущем примере;
в операторе инициализации for;
for(var x = 1; x < 10; x++)
в операторе инициализации foreach;
foreach(var item in list){...}
в операторе using.
using (var file = new StreamReader("C:\\myfile.txt")) {...}

Методы расширения

Методы расширения позволяют "добавлять" методы в существующие типы без создания нового производного типа, перекомпиляции или иного изменения исходного типа. Методы расширения представляют собой особую разновидность статического метода, но вызываются так же, как методы экземпляра в расширенном типе. Для клиентского кода, написанного на языках C# и Visual Basic, нет видимого различия между вызовом метода расширения и вызовом методов, фактически определенных в типе.

namespace ExtensionMethods
{
    public static class MyExtensions
    {
        public static int WordCount(this String str)
        {
            return str.Split(new char[] { ' ', '.', '?' }, 
                             StringSplitOptions.RemoveEmptyEntries).Length;
        }
    }   
}

Метод расширения WordCount можно ввести в область действия с помощью следующей директивы using:
using ExtensionMethods;
Его можно вызвать из приложения с помощью следующего синтаксиса:
string s = "Hello Extension Methods";
int i = s.WordCount();

Именованные и необязательные аргументы

В Visual C# 2010 появились именованные и необязательные аргументы. Именованные аргументы позволяют указать аргумент для определенного параметра, связав аргумент с именем параметра, а не с позицией параметра в списке параметров.Необязательные аргументы позволяют опускать аргументы для некоторых параметров. Оба подхода можно применять к методам, индексаторам, конструкторам и делегатам.
class NamedExample
{
    static void Main(string[] args)
    {
        // The method can be called in the normal way, by using positional arguments.
        Console.WriteLine(CalculateBMI(123, 64));
        // Named arguments can be supplied for the parameters in either order.
        Console.WriteLine(CalculateBMI(weight: 123, height: 64));
        Console.WriteLine(CalculateBMI(height: 64, weight: 123));
        // Named arguments can follow positional arguments.
        Console.WriteLine(CalculateBMI(123, height: 64));
    }
    static int CalculateBMI(int weight, int height)
    {
        return (weight * 703) / (height * height);
    }
}


Методы Async

Async с помощью функции можно вызывать асинхронные методы без использования явных обратных вызовов или вручную разделить ваш код через несколько методов или лямбда-выражения. 
Функция Async была реализована в Visual Studio 2012.
 
// This Click event is marked with the async modifier.
private async void startButton_Click(object sender, RoutedEventArgs e)
{
    await DoSomethingAsync();
}
 
private async Task DoSomethingAsync()
{
    Task<int> delayTask = DelayAsync();
    int result = await delayTask;
 
    // The previous two statements may be combined into
    // the following statement.
    //int result = await DelayAsync();
 
    Debug.WriteLine("Result: " + result);
}
 
private async Task<int> DelayAsync()
{
    await Task.Delay(100);
    return 5;
}
 
// Output:
//  Result: 5


Полезный код

Преобразовать Base64 в файл

// данные из файла
 string xmlContent = File.ReadAllText(@"C:\Temp\Test.txt");
// корневой элемент XML
 XElement newNode = XDocument.Parse(xmlContent).Root;
// декодируем в байты строку base64
 byte[] base64 = System.Convert.FromBase64String(newNode.Value);
// сохраняем в нужный формат
 File.WriteAllBytes(@"C:\Temp\test.zip", base64);


// декодировать URL  в русские символы
string decode = HttpUtility.UrlDecode(str);



About