Страница 1 из 2

Динамические массивы

Добавлено: 25 Ноябрь 2007, 13:24
Admin
Как повторить такой код на С# ?
В частности нижнюю часть там где создаются массивы строк

Код: Выделить всё

private void InitializeDataGridView()
{
    // Create an unbound DataGridView by declaring a column count.
    dataGridView1.ColumnCount = 4;
    dataGridView1.ColumnHeadersVisible = true;

    // Set the column header style.
    DataGridViewCellStyle columnHeaderStyle = new DataGridViewCellStyle();

    columnHeaderStyle.BackColor = Color.Beige;
    columnHeaderStyle.Font = new Font("Verdana", 10, FontStyle.Bold);
    dataGridView1.ColumnHeadersDefaultCellStyle = columnHeaderStyle;

    // Set the column header names.
    dataGridView1.Columns[0].Name = "Recipe";
    dataGridView1.Columns[1].Name = "Category";
    dataGridView1.Columns[2].Name = "Main Ingredients";
    dataGridView1.Columns[3].Name = "Rating";

    // Populate the rows.
    string[] row1 = new string[] { "Meatloaf", "Main Dish", "ground beef",
        "**" };
    string[] row2 = new string[] { "Key Lime Pie", "Dessert", 
        "lime juice, evaporated milk", "****" };
    string[] row3 = new string[] { "Orange-Salsa Pork Chops", "Main Dish", 
        "pork chops, salsa, orange juice", "****" };
    string[] row4 = new string[] { "Black Bean and Rice Salad", "Salad", 
        "black beans, brown rice", "****" };
    string[] row5 = new string[] { "Chocolate Cheesecake", "Dessert", 
        "cream cheese", "***" };
    string[] row6 = new string[] { "Black Bean Dip", "Appetizer", 
        "black beans, sour cream", "***" };
    object[] rows = new object[] { row1, row2, row3, row4, row5, row6 };

    foreach (string[] rowArray in rows)
    {
        dataGridView1.Rows.Add(rowArray);
    }
}

Добавлено: 25 Ноябрь 2007, 13:58
try-catch

Код: Выделить всё

  PROGRAM

arr	string[]

  CODE
	arr &= new string[]{'a', 'b', 'c', 'd'}
	message(arr[1])

Добавлено: 25 Ноябрь 2007, 14:58
Admin
Спасибо ... а тоя пытался в круглые скобки взять массив данных как ('a','b','c')
И еще операции := и &= равнозначны?

Добавлено: 25 Ноябрь 2007, 15:55
try-catch
Admin писал(а):Спасибо ... а тоя пытался в круглые скобки взять массив данных как ('a','b','c')
И еще операции := и &= равнозначны?
Нет:
&= - присвоение референсов;
:= - т.н. smart-assignment, т.е. компилятор должен сам решить что использовать; либо =, если это value-type, либо &=, если это референс.

Добавлено: 26 Ноябрь 2007, 0:14
Admin
Кстати по Dispose. Насколько я читал .Net славится своей "сборкой мусора"
Т.е. я так понимаю, больших ликов не будет от игнорирования Dispose?

Добавлено: 26 Ноябрь 2007, 9:50
Дед Пахом
Dispose вызовется при сборке мусора или при завершении программы, так что вобщем-то можно игнорировать. Другое дело, что ресурсы ОС остаются захваченными, что может привести к их исчерпанию в худшем случае.

Добавлено: 26 Ноябрь 2007, 11:22
Admin
Не ну это понятно... неосвобождение одного объекта и тысяч таких объектов приводит к разным результатам :)

Добавлено: 26 Ноябрь 2007, 13:35
try-catch
Admin писал(а):Кстати по Dispose. Насколько я читал .Net славится своей "сборкой мусора"
Т.е. я так понимаю, больших ликов не будет от игнорирования Dispose?
Зависит от реализации конкретного класса.
Например System.Drawing.SolidBrush метод Dispose() в MSDN содержит такое замечание:
Always call Dispose before you release your last reference to the Brush. Otherwise, the resources it is using will not be freed until the garbage collector calls the Brush object's Finalize method.
Т.е. забудьте про Garbage Collector и освобождайте вручную.

Если же в описании Dispose() предупреждений нет, то важно вовремя убивать референсы на неиспользуемые объекты. Иначе все будет висеть и никакой Garbage Collector не поможет.

Добавлено: 30 Ноябрь 2007, 9:48
Admin
Вот такой код работает

Код: Выделить всё

Clipboard byte[]
  CODE
Clipboard &= new byte[100]
а такой нет

Код: Выделить всё

Clipboard byte[,]
  CODE
Clipboard &= new byte[100,100]
как писать, что делать?

Добавлено: 30 Ноябрь 2007, 11:56
try-catch
Admin писал(а):Вот такой код работает

Код: Выделить всё

Clipboard byte[]
  CODE
Clipboard &= new byte[100]
а такой нет

Код: Выделить всё

Clipboard byte[,]
  CODE
Clipboard &= new byte[100,100]
как писать, что делать?

Код: Выделить всё

Clipboard byte[,]
  CODE
    Clipboard &= (new byte[100,100]) AS byte[,]
Хотя выглядит неинтуитивно и кривовато. :?

Добавлено: 30 Ноябрь 2007, 15:03
Admin
испохабили язык ... :(
ну вот как примеры с Си# переделывать скажите мне.

P.S. А откуда ты это все знаешь? :)

Добавлено: 30 Ноябрь 2007, 15:52
try-catch
Admin писал(а):испохабили язык ... :(
С AS-ом это временный workaround. К следующему релизу обещали исправить.
Admin писал(а):ну вот как примеры с Си# переделывать скажите мне.
Спокойно так, неторопясь... Без попыток обогнать паровоз...
Admin писал(а):P.S. А откуда ты это все знаешь? :)
У разработчиков Clari# компилятора спрашиваю. :roll:

Добавлено: 30 Ноябрь 2007, 17:35
Admin
Мен!
Выкладывай примеры. :)
Хотя бы просто куски кода ... а то нефига в некоторых местах непонятно.

P.S. В курсе как делать делегаты или как пользоваться System.Delegate?

Добавлено: 30 Ноябрь 2007, 19:12
try-catch
Admin писал(а):Мен!
Выкладывай примеры. :)
Спокойствие, только спокойствие!
На Clari# пока ничего не делал и не собираюсь - жду прибытия паровоза (то бишь AppGen'a).
Привыкать к новому синтаксису, который к тому же еще в процессе устаканивания, тоже удовольствие ниже среднего.
Так что пока осмысленных примеров нет. (Кое-кто уже игрушку успел наваять, между прочим! :roll:)
Admin писал(а):Хотя бы просто куски кода ... а то нефига в некоторых местах непонятно.
Если есть конкретные вопросы - могу спросить.
За спрос не бьют...
Admin писал(а):P.S. В курсе как делать делегаты или как пользоваться System.Delegate?
В простейшем случае так:

Код: Выделить всё

  PROGRAM
  MAP
! declare delegate
DelegateDecl  PROCEDURE(clastring), TYPE
! declare method with matching parameters
TestProc  PROCEDURE(clastring)
! declare method with delegate as parameter
TestParam  PROCEDURE(DelegateDecl)
  END

  CODE
    TestParam(new DelegateDecl(TestProc))

TestParam  PROCEDURE(DelegateDecl test)
  CODE
    test('Hello delegate!')

TestProc  PROCEDURE(clastring s)
  CODE
    message(s)

Добавлено: 01 Декабрь 2007, 4:17
Admin
Это сильно простейший случай ...
Хотелось бы такого функционала который присутствует у стандартных классов...

Хочу в своем классе сделать возможность

Код: Выделить всё

MyClass.OnShowStatus += MainForm.ShowStatus

MainForm.ShowStatus PROCEDURE(string text)
  CODE
  MESSAGE(text)
Понимаешь что имелось в виду?