вторник, 23 октября 2007 г.
Уважаемые коллеги!
Друзья! Убедительная просьба: пожалуйста, оставляйте комментарии к постам! Так я буду знать что мой труд не напрасен! Любые замечания и пожелания обязательно будут рассмотрены и приняты во внимание! Ели у вас появились вопросы не стесняйтесь и задавайте их в комментариях - я буду рад вам ответить, тем более что возможно эти ответы пригодятся и другим нашим коллегам! Отправить комментарий можно нажав на ссылку внизу поста, если вы стесняетесь или не хотите указывать своего имени выберете опцию "Анонимный"; если у вас нет собственной странички указывайте любую даже не существующую. Спасибо!
четверг, 11 октября 2007 г.
Мелочи на C# облегчающие жизнь: Real World Examples
Некоторые полезные мелочи которым я научился программируя на C#:
1. Вызов функции из С библиотеки:
2. Перегрузка индексатора (перегрузка оператора []):
3. Символ @ в начале строки позволяет записывать строку, не дублируя слеши, как это было в С++, то есть строка:
4. Символ @ перед идентификатором (именем переменной) означает, что компилятор должен разрешить использовать данное имя идентификатора, даже если оно зарезервированоое слово:
5. Смело юзайте #region и #endregion для выделения секций кода. Очень помогает!
1. Вызов функции из С библиотеки:
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
extern static short QueryPerformanceCounter(ref long x);
2. Перегрузка индексатора (перегрузка оператора []):
public float this[int row, int col]
{
get
{ return GetElement(row, col); }
set
{ SetElement(row, col, value); }
}
3. Символ @ в начале строки позволяет записывать строку, не дублируя слеши, как это было в С++, то есть строка:
string FileName = "c:\\temp\\test.txt";Полностью идентична строке:string FileName = @"c:\temp\test.txt";Не правда ли читабельнее! ;-)4. Символ @ перед идентификатором (именем переменной) означает, что компилятор должен разрешить использовать данное имя идентификатора, даже если оно зарезервированоое слово:
int this = 42; // не компилируется, ошибка:
// Identifier expected, 'this' is a keyword
int @this = 42; // Компилируется нормально
5. Смело юзайте #region и #endregion для выделения секций кода. Очень помогает!
воскресенье, 16 сентября 2007 г.
Создание нетривиальных приложений на C#: Real World Examples
То, что преподают в институте зачастую весьма просто и тривиально и плохо соотносится с кодом и решениями в реальных приложениях. Поэтому, я счел, что нелишним будет знакомство читателя с реальными трудностями с которыми я столкнулся, так сказать real world examples.
Начну с самого, казалось бы, простого - с массивов. Недавно работая над научной работой наткнулся на интересную вещь: необходимо было создать в C# трехмерный массив, причем две из трех его размерностей должны быть динамическими. И избежать этого никак было нельзя.
Как оказалось решение весьма просто - если раньше в C++ для работы с динамическими массивами использовались шаблоны библиотеки STL и работа с трехмерным указателем на массив не предвещала ровным счетом ничего хорошего, то теперь на C# объявление и использование такого массива оказывается весьма прстым и тривиальным:
Немного подумав я пришел в итоге к следующему объявлению:
Начну с самого, казалось бы, простого - с массивов. Недавно работая над научной работой наткнулся на интересную вещь: необходимо было создать в C# трехмерный массив, причем две из трех его размерностей должны быть динамическими. И избежать этого никак было нельзя.
Как оказалось решение весьма просто - если раньше в C++ для работы с динамическими массивами использовались шаблоны библиотеки STL и работа с трехмерным указателем на массив не предвещала ровным счетом ничего хорошего, то теперь на C# объявление и использование такого массива оказывается весьма прстым и тривиальным:
Немного подумав я пришел в итоге к следующему объявлению:
.....
/// <summary>
/// declare inner List
/// </summary>
private List<double> _arr;
/// <summary>
/// declare main List
/// </summary>
public static List<List<double>>[] Arr;
.....
Инициализация получилась также нетривиальной:
/// <summary>
/// initialize List and array
/// </summary>
private void init()
{
N = (int)numericUpDown1.Value;
Arr= new List<List<double>>[N];
for (int i = 0; i < N; i++)
{
Arr[i] = new List<List<double>>();
}
}
.....
.....
// Где-то в коде:_arr = new List<double>();Еще дальше:
_arr.Add(some_value);
.....X[counter].Add(_x);
Y[counter].Add(_y);
t[counter].Add(_t);
Использовать массивы можно как всегда, не забывая только про правильную индексацию:
for (byte i = 0; i < Arr.Length; i++)
for (byte j = 0; j < Arr[i].Count; j++)
for (byte k = 0; k < Arr[i][j].Count - 1; k++)
.......
Arr[i][j][k];
Подписаться на:
Сообщения (Atom)