Для входа на форум нажмите здесь
Новые комментарии
Computer programming
Автор темы: Aft3rmath_renamed_580476_10042022
Дата создания: 18.04.2011 10:58
Аватар для Anquiatus_renamed_642274_29082021
Мастер
Регистрация:
06.12.2008
Re: ADO.Net + C#
Сообщение от Leledinn:
Вопрос: где бы время найти чтобы все это прочитать?...
угу, мне в голову пришли ещё наполеоновские планы наконец осилить Таненбаума.

http://www.ozon.ru/context/detail/id/3092042/
http://www.ozon.ru/context/detail/id/2967330/
http://www.ozon.ru/context/detail/id/1504328/

целый список себе составил ещё, большинство ты уже озвучил тут, кстати :) вообще, с некоторого времени предпочитаю покупать бумажные книги - пусть и обойдётся в копеечку, зато гораздо удобнее изучать.

Добавлено через 1 минуту
Сообщение от Leledinn:
нет, это плохое название
Coding: Recommendations and References.

хотя, тоже нет - это слишком пафосно.
Последний раз редактировалось Anquiatus_renamed_642274_29082021; 28.04.2011 в 14:53. Причина: Добавлено сообщение
Аватар для Leledinn
Забаней
Регистрация:
08.09.2005
Re: ADO.Net + C#
У меня по операционным системам дома лежит книга одна... она 197бородатого года издания. Тогда еще ОС как явление были весьма новы.

Там предельно кратко и ясно описаны все принципы построения ОС. Даже какие-то примеры алгоритмов есть. Книга, естественно, переведена в советское время. Таких книг больше не делают. :(

Есть еще книга по принципам разработки ПО, тех же лет примерно.

Поразительные книги.

Пропаганда нацелена на удобрение дерева, на котором растет плод нашего воображения. (с)
При каждом пробитии дна открываются новые горизонты развития. (народная мудрость)
...зато рыночек, джинсы, жвачка, колбаса и можно заграницу ездить без отчета коммисару в райком.. oh, wait...
Цель капитализма всегда одна: Эксплуатация. Гнет. Война. Чтоб народных масс нищета и гибель ему несли максимальную прибыль!
Аватар для ВедхийТип
Предводитель
Регистрация:
28.09.2007
Re: ADO.Net + C#
я последнее время книжки, как я вление, не ценю. Они тратят мое время. а это плохо.

Есть совершенно другой вид книги - хорошая и простая в понимании. Вот эти стоит читать.

Из таких встречал только... 4:

патерны ооп
чистый код
жаба скрипт Джона Рейсинга
и сети Таненбаума.

У Троелсена книга безусловно не плохая, однако до такой концентрации мысли как в этих 4 ей далеко.

Кстати у Таненбаума есть книга про ОС. Там рассказывается о том, как создать свою ОС. Причем все этапы и части, начиная от файловой системы, заканчивая чем угодно. :)
Аватар для Adelor_renamed_48291_20122020
Гуру
Регистрация:
06.06.2006
Признанный автор
Награжден за: За интересные статьи по Age of Conan Просветитель
Награжден за: За помощь в развитии раздела Age of Conan
Re: ADO.Net + C#
Вот еще курс лекций по алгоритмам неплохой
http://www.intuit.ru/department/algorithms/staldata/0/

Кстати про ооп и паттерны писали уже, а про рефакторинг? не помню уже, слишком много ссылок было
http://www.ozon.ru/context/detail/id/1308678/
Аватар для san_nsk_renamed_63258_22022020
Читатель
Регистрация:
17.11.2006
Re: ADO.Net + C#
Сообщение от Adelor:
Кстати про ооп и паттерны писали уже, а про рефакторинг? не помню уже, слишком много ссылок было
http://www.ozon.ru/context/detail/id/1308678/
А следом Refactoring to Patterns by Joshua Kerievsky
Аватар для Leledinn
Забаней
Регистрация:
08.09.2005
Re: ADO.Net + C#
Сообщение от Adelor:
а про рефакторинг?
"Рефакторинг" Мартина Фаулера - это мастхев книга для программиста, претендующего на высокую культуру кода.. И, да, я его упоминал. Более того, я владею именно этой редакцией, что на Озоне.

Добавлено через 2 минуты
Сообщение от Adelor:
Вот еще курс лекций по алгоритмам неплохой
Ну я про ИНТУИТ упоминал, вроде вразумительно пишут. На той же инфанате.ком можно найти полный курс лечек от ИНТУИТа.

Пропаганда нацелена на удобрение дерева, на котором растет плод нашего воображения. (с)
При каждом пробитии дна открываются новые горизонты развития. (народная мудрость)
...зато рыночек, джинсы, жвачка, колбаса и можно заграницу ездить без отчета коммисару в райком.. oh, wait...
Цель капитализма всегда одна: Эксплуатация. Гнет. Война. Чтоб народных масс нищета и гибель ему несли максимальную прибыль!
Последний раз редактировалось Leledinn; 28.04.2011 в 20:58. Причина: Добавлено сообщение
Аватар для Leledinn
Забаней
Регистрация:
08.09.2005
Re: ADO.Net + C#
Короче, меня такая фигня интересует:

Мне нужно чтобы при создании массива числовых примитивов C# (базовые числовые типы short, int, byte, и т.д.) элементы инициализировались не по-умолчанию значением 0, а некоторым другим значением. Например, вот такой код:

Код:
short [] short_vector = new short[100500];
По умолчанию, там будет массив из 100500 нулевых числа типа Int16. А мне надо чтобы там были не нули, а значения 0xFF00, например. Без топорных циклов заполнения массива поэлементно. Они засоряют код ужасно. У меня больше 40 массивов разной длины в качестве полей класса, содержащих разную информацию, поэтому мне надо инициализировать все их особенным образом в конструкторе класса.

Наследовать от примитива и переопределить ему конструктор по-умолчанию ? Это, мне кажется, или жесть... или вообще невозможно. нельзя, у примитивов не конструкторов

Еще вариант: класс System.Array наследовать и переопределить ему метод Clear(). По-моему, это тоже ерунда. нельзя

Есть идеи получше?

****блять! Придется циклы писать... Даже Array.ForEach() принимает на вход делегат, который с элементами массива по значению работает ,а не по ссылке, т. е. присваивать внутри кода делегата переменной новое значение бессмысленно, это копия ...
Array.Initialize() работает только с массивами ссылочных типов.

Пропаганда нацелена на удобрение дерева, на котором растет плод нашего воображения. (с)
При каждом пробитии дна открываются новые горизонты развития. (народная мудрость)
...зато рыночек, джинсы, жвачка, колбаса и можно заграницу ездить без отчета коммисару в райком.. oh, wait...
Цель капитализма всегда одна: Эксплуатация. Гнет. Война. Чтоб народных масс нищета и гибель ему несли максимальную прибыль!
Аватар для Anquiatus_renamed_642274_29082021
Мастер
Регистрация:
06.12.2008
Re: ADO.Net + C#
может вместо массива использовать класс-наследник типизированной коллекции, и задать нужный конструктор?
Код:
class myInt16 : List<short>
{
    public myInt16(int quantity, short defaultValue)    
    {
        for (int i=0;i<quantity;i++) Add(defaultValue);
    }
}
инициализация и доступ будут выглядеть как раз примерно как тебе нужно:
Код:
myInt16 array = new myInt16(10, 13);
foreach (short value in array)
    Console.Write(value + " ");
Console.WriteLine();
Console.WriteLine(array[8]);
Console.ReadKey();
Аватар для DistortNeo
Заклинатель электронов в кремниевых кристаллах
Регистрация:
12.05.2006
Знаток
Награжден за: За помощь форуму и посетителям. Зомби мутанта Признанный автор
Награжден за: Статьи по Lineage2. Обзоры и руководства.
Re: ADO.Net + C#
а что мешает так сделать? :
Код:
static class Util
{
  public static T[] InitializedArray<T>(int count, T defvalue)
  {
    T[] res = new T[count];
    for (int i = 0; i < count; i++)
      res[i] = defvalue;
    return res;
  }
}

short[] my_vector = Util.InitializedArray<short>(100500, 0xFF00);

У меня все равно больше :)
Аватар для ВедхийТип
Предводитель
Регистрация:
28.09.2007
Re: ADO.Net + C#
Сообщение от DistortNeo:
а что мешает так сделать? :
да - это пойдет.

эх, люблю дженерики. :)
Аватар для Anquiatus_renamed_642274_29082021
Мастер
Регистрация:
06.12.2008
Re: ADO.Net + C#
Сообщение от DistortNeo:
а что мешает так сделать?
да, так получается почти в 2.5 раза быстрее, чем мой вариант :)
хотя, эта разница появляется только на количестве элементов > 1-2кк
Аватар для ВедхийТип
Предводитель
Регистрация:
28.09.2007
Re: ADO.Net + C#
Народ, подскажите плз шо делать... есть такое:

PHP код:
public T GetById<TK>(K id)
{
    return 
_dataContext.Entities.SingleOrDefault(=> MySingleOrDefault);

где _dataContext.Entities - это грубо говоря таблица типа T, а К - это тип ключа (примари кей)

так вот я хотел бы сделать лейзи лоад функцию выбора по id для этой таблички, что-то типа:

PHP код:
protected bool MySingleOrDefault<TK>(T elementK id)
{
    
PropertyInfo[] props element.GetType().GetProperties();
    
K elId GetId<TK>(propselement);
    if (
elId.Equals(id))
        return 
true;
    return 
false;

ощем ругается оно на то, что мол там передается System.Func<T,bool> - а я хз... такие делегаты не писал. Шо это за чушь, и как оно работать то должно?
Аватар для Leledinn
Забаней
Регистрация:
08.09.2005
Re: ADO.Net + C#
Сообщение от DistortNeo:
а что мешает так сделать? :
Во, то что нужно.

Просто я к шаблонам STL привык, а есть ли аналог в шарпе, как-то не подумал...

Добавлено через 5 минут
Сообщение от Anquiatus:
может вместо массива использовать класс-наследник типизированной коллекции, и задать нужный конструктор?
Вариант не пойдет, потому что у меня есть данные типа int, short, byte, sbyte, char, под каждый свой класс делать - ну его на хрен. У Нео изящнее получается.

Пропаганда нацелена на удобрение дерева, на котором растет плод нашего воображения. (с)
При каждом пробитии дна открываются новые горизонты развития. (народная мудрость)
...зато рыночек, джинсы, жвачка, колбаса и можно заграницу ездить без отчета коммисару в райком.. oh, wait...
Цель капитализма всегда одна: Эксплуатация. Гнет. Война. Чтоб народных масс нищета и гибель ему несли максимальную прибыль!
Последний раз редактировалось Leledinn; 29.04.2011 в 15:46. Причина: Добавлено сообщение
Аватар для Leledinn
Забаней
Регистрация:
08.09.2005
Re: ADO.Net + C#
Я тут вот что подумал.... Дженерики были бы оптимальнее. Т.е. вместо массива [] я бы использовал какую-нибудь подходящую обобщенную коллекцию из Generic. Они заявлены в .NET 4 как thread-safe и оптимизированы для работы с памятью и GC.. Для меня это важно, ибо у меня программа обрабатывает список файлов в многопоточном контексте.

Добавлено через 6 минут
Сообщение от ВедхийТип:
Народ, подскажите плз шо делать... есть такое:
Ооо... я тут не помощник точно. Не добрался еще до таких конструкций. Хотя...

Сообщение от ВедхийТип:
System.Func
Это делегат, возвращающий некоторое значение. В отличие от Action<T>, который получает на вход, а на выходе void. Я как раз это копал, когда пытался инициализацию через Array.ForEach() сделать.

Вызов Array.ForEach( T [], Action<T>) имеет такой вид. Где Action<T> - это void delegate(T t), или что-то типа

Func <T1, T2> похоже это T1 delegate(T2 t) или что-то наподобие, если я правильно понял.

Добавлено через 10 минут
Ага, вот:

http://msdn.microsoft.com/en-us/library/bb549151.aspx

Код:
public delegate TResult Func<in T, out TResult>(     T arg )
Т и К местами поменяй.

Код:
public T GetById<T, K>(K id)
{
    return _dataContext.Entities.SingleOrDefault(e => MySingleOrDefault);
}
вот так:

Код:
public T GetById<K, T>(K id)
{
    return _dataContext.Entities.SingleOrDefault(e => MySingleOrDefault);
}
и должно соответствовать делегату типа TResult delegate Func<T, TResult>(T t)

Может я что-то не то пишу, но смсл в том, чтоб вид функции GetById привести к виду делегата, который она "использует". Я просто по аналогии с шаблонами и указателями на функции в С++ предположил.

Добавлено через 2 минуты
Блин... мне C# с каждым днем все больше и больше нравится.

Добавлено через 3 минуты
Ах, да. Func работает только .NET 3.5 +, судя по ремарке в МСДНе.

Пропаганда нацелена на удобрение дерева, на котором растет плод нашего воображения. (с)
При каждом пробитии дна открываются новые горизонты развития. (народная мудрость)
...зато рыночек, джинсы, жвачка, колбаса и можно заграницу ездить без отчета коммисару в райком.. oh, wait...
Цель капитализма всегда одна: Эксплуатация. Гнет. Война. Чтоб народных масс нищета и гибель ему несли максимальную прибыль!
Последний раз редактировалось Leledinn; 29.04.2011 в 18:53. Причина: Добавлено сообщение
Аватар для ВедхийТип
Предводитель
Регистрация:
28.09.2007
Re: ADO.Net + C#
Вот в том-то и прикол, что на вход у тебя одна переменная и я что-то не могу понять, откуда взять этот мать его параметр поиска, ведь этот единственный параметр - это Т!

не, я конечно могу через проперть класса задать этот параметр... ака глобальную переменную - но это изврат какой-то.

Все дело в том, что я не понимаю, как работает эта ерунда в принципе.

(e => e.id == id) работает, причем и е и id передается в тело делегата.

или быть может я что-то путаю?

Добавлено через 1 минуту
иногда я чувствую себя идиотом. :(
Последний раз редактировалось ВедхийТип; 29.04.2011 в 18:56. Причина: Добавлено сообщение
Re: ADO.Net + C#
Сообщение от Leledinn:
она 197бородатого года издания. Тогда еще ОС как явление были весьма новы.

"наука и жизнь" в курсе была, если что.

Don't worry, I'll be by your side.
Аватар для Leledinn
Забаней
Регистрация:
08.09.2005
Re: ADO.Net + C#
Сообщение от ВедхийТип:
e => MySingleOrDefault
Что за "e"?

Приведи код в контексте. Не понятно, что на вход получает SingleOrDefault(), и почему функция GetById внутри MySingleOrDefault вдруг стала GetId.

Короче, первый и второй метод вообще не связаны никак получаются...

---------------

Аргументы => Операторы


Код:
public T GetById<T, K>(K id)
{
    return _dataContext.Entities.SingleOrDefault(e => MySingleOrDefault);
} 

разворачивается в

|
V

public T GetById<T, K>(K id)
{
    return _dataContext.Entities.SingleOrDefault( 
            delegate( TypeOf_e e) { return MySingleOrDefault( e ); } ) 
}

1. в лямбда-выражении не фигурирует аргумент id, по которому поиск осуществляется, а присутствует какой-то е
2. твоя функция MySingleOrDefault принимает 2 параметра, а должна 1 

либо лямбда-выражение должно быть таким:

public T GetById<T, K>(K id)
{
    return _dataContext.Entities.SingleOrDefault(id=> MySingleOrDefault);
}

protected bool MySingleOrDefault<T, K>(T element, K id)
{
/// ??? какой-то код
    T element = GetById<T, K>(id); //выбор элемента по id  
/// ??? какой-то код
/*
    PropertyInfo[] props = element.GetType().GetProperties();
    K elId = GetId<T, K>(props, element);
    if (elId.Equals(id))
        return true;
    return false;
*/
}
Добавлено через 5 минут
В общем, недостаточно входных данных ,чтобы разобраться и на вопрос ответить.

Пропаганда нацелена на удобрение дерева, на котором растет плод нашего воображения. (с)
При каждом пробитии дна открываются новые горизонты развития. (народная мудрость)
...зато рыночек, джинсы, жвачка, колбаса и можно заграницу ездить без отчета коммисару в райком.. oh, wait...
Цель капитализма всегда одна: Эксплуатация. Гнет. Война. Чтоб народных масс нищета и гибель ему несли максимальную прибыль!
Последний раз редактировалось Leledinn; 29.04.2011 в 21:49. Причина: Добавлено сообщение
Аватар для ВедхийТип
Предводитель
Регистрация:
28.09.2007
Re: ADO.Net + C#
ну да, то я загнался с синтаксисом... :)

кароче суть такая:

есть базовый класс который реализует крад операции.

я справился со всеми, кроме - GetById

фишка в том, что в таблицах не всегда первичный ключь обозначается как Id. Это может быть что угодно. По этому нужен способ найти этот самый ключь.

GetId - это тот самый поиск ключае.

дальше сравнение, соответствует ли ключь переданного эл - искомому, и если да, то ... блин можно записать короче :)

ну в общем идея: сравнение ключа эл с искомым.

Это 2 параметра.

А делегат хавает только один.

Добавлено через 1 минуту
по идее функция SingleOrDefault вернет единственный эл, который будет удовлетворять услови - равенство ключа... которое я провожу... Но блин!
Последний раз редактировалось ВедхийТип; 29.04.2011 в 22:04. Причина: Добавлено сообщение
Аватар для Leledinn
Забаней
Регистрация:
08.09.2005
Re: ADO.Net + C#
Сообщение от ВедхийТип:
А делегат хавает только один.
Кинь сюда описание полей, свойств методов своего CRUD-класса. Реализация методов не нужна.

Пропаганда нацелена на удобрение дерева, на котором растет плод нашего воображения. (с)
При каждом пробитии дна открываются новые горизонты развития. (народная мудрость)
...зато рыночек, джинсы, жвачка, колбаса и можно заграницу ездить без отчета коммисару в райком.. oh, wait...
Цель капитализма всегда одна: Эксплуатация. Гнет. Война. Чтоб народных масс нищета и гибель ему несли максимальную прибыль!
Аватар для ВедхийТип
Предводитель
Регистрация:
28.09.2007
Re: ADO.Net + C#
ну это точно врятли поможет :)

ну в принципе, я такое пишу часа за два. просто это линк а не хибер...
PHP код:
public class BaseRepository<T,K>: IBaseRepository
{

 public 
Т Create<T>(T t
 {}

 public 
T Update<T>(T t
 {}

 public 
IQuerible<TGetAll() 
 {}

 public 
bool Delete<TK>(K id)
 {}
 public 
bool Delete<T>(T t
 {}

 
publiic T GetById<TK>(K id)

 protected 
virtual K GetId<T,K>(T t)
 {}

только особо к синтаксису не придераться - пишу по памяти и на гохе а не в редакторе. :)

ну кароче вот этот протектед метод нужен для GetById ... можешь мне поверитьь это сделано из лучших сообраджений маразма :)

ощем вот этот прикол

PHP код:
public T GetById<TK>(K id)
{
    return 
_dataContext.Entities.SingleOrDefault(MySingleOrDefault);

должен определять соответствует ли переданный id для конкретной сущности которые он будет перебирать.

и по логике вещей это должно быть сравнение типа сущности Т и ее ключа с эталоном Id... но т.к. делегат принимает 1 параметр... я в замешательстве - как это использовать?
Аватар для Leledinn
Забаней
Регистрация:
08.09.2005
Re: ADO.Net + C#
По-моему ты сам себя запутал.

Тебе нужно вытащить некий 1 объект по его ключу. Но имя поля главного ключа либо неизвестно заранее, либо разное для разных таблиц в твоей БД.

Тебе нужно написать метод, который бы возвращал имя поля, являющегося главным ключом для данной сущности.

Т.е. если есть таблица Person

very_unusual_long_name_for_primary_key integer PRIMARY KEY,
FirstName varchar,
LastName varchar,
Age int,
...

то твой метод должен возвращать неким образом имя поля very_unusual_long_name_for_primary_key

после этого ты спокойно в делегат передашь логическое выражение, где будешь проверять условие: id == very_unusual_long_name_for_primary_key и получать искомый объект.

Тебе даже не придется СВОЙ делегат писать, обойдешься анонимным l-выражением:

id =>very_unusual_long_name_for_primary_key == id

Вопрос в том, можно ли как-то так работать с объектом-сущностью, чтобы можно было имя этого поля получить, зная тип.
И как метод GetById узнает, с каким типом сущности он будет иметь дело.

То идее, когда ты явно определяешь T, K в

T GetById<T, K>(K id)

метод GetById будет "в курсе" об этих типах

Далее: вот эта конструкция тоже "в курсе", что надо вызвать SingleOrDefault для сущности типа Т

_dataContext.Entities.SingleOrDefault, потому что возвращаемый тип явно указан для метода GetById

т.е. нам остается перед ее вызовом пределить имя поля первичного ключа конкретной сущности, написать вышеописанное l-выражение с id и передать его туда.

----------------------

Твоя задача: написать метод, который по типу Т сможет определять имя поля первичного ключа соотв. ему сущности в БД.

Пропаганда нацелена на удобрение дерева, на котором растет плод нашего воображения. (с)
При каждом пробитии дна открываются новые горизонты развития. (народная мудрость)
...зато рыночек, джинсы, жвачка, колбаса и можно заграницу ездить без отчета коммисару в райком.. oh, wait...
Цель капитализма всегда одна: Эксплуатация. Гнет. Война. Чтоб народных масс нищета и гибель ему несли максимальную прибыль!
Аватар для Anquiatus_renamed_642274_29082021
Мастер
Регистрация:
06.12.2008
Re: ADO.Net + C#
Сообщение от Leledinn:
Вопрос в том, можно ли как-то так работать с объектом-сущностью, чтобы можно было имя этого поля получить, зная тип.
механизмы рефлексии это позволяют, если я правильно понял твою идею. но проблема, мне кажется, будет в том, что домен первичного ключа может быть не уникален, среди всех атрибутов.
Аватар для Leledinn
Забаней
Регистрация:
08.09.2005
Re: ADO.Net + C#
Сообщение от Anquiatus:
механизмы рефлексии это позволяют, если я правильно понял твою идею. но проблема, мне кажется, будет в том, что домен первичного ключа может быть не уникален, среди всех атрибутов.
Задача: написать функцию, которая будет это поле определять среди прочих полей. Как это, возможно ли это - я хз. Я так глубоко не влезал еще. Скорее всего есть такой механизм. Я точно знаю, что можно это делать, используя механизмы самих СУБД. Я подозреваю, что это умеет делать JBDC и Hibernate. Я уверен, что если у конкурирующих платформ есть такая фича, то у .NET она ОБЯЗАНА быть.

Пропаганда нацелена на удобрение дерева, на котором растет плод нашего воображения. (с)
При каждом пробитии дна открываются новые горизонты развития. (народная мудрость)
...зато рыночек, джинсы, жвачка, колбаса и можно заграницу ездить без отчета коммисару в райком.. oh, wait...
Цель капитализма всегда одна: Эксплуатация. Гнет. Война. Чтоб народных масс нищета и гибель ему несли максимальную прибыль!
Аватар для ВедхийТип
Предводитель
Регистрация:
28.09.2007
Re: ADO.Net + C#
этот вопрос решает метод GetId =)

Там уже в нем все это реализованно. =) Делается через атрибуты

Я пока про это не думаю - есть другие более важные вопросы, например довести использование нинджекта до уровня рутины... но да ладно :)

Просто сам прикол в том. чтобы не писать лмбду для SingleOrDefaul, а написать другой метод, и передать имя туда. Вот.
Аватар для OleLukoe
Читатель
Регистрация:
01.06.2007
Re: ADO.Net + C#
В своё время слышал что язык Си это вообще шутка двух очень умных людей, но именно шутка. Или это очередное расхожее клише?

Играю в то, что сам не понимаю.
Ваши права в разделе