Вы не вошли.


Хочу я получит последний элемент массива
int lastItem = array[array.Count - 1];Но так мне не нравится, хочется
int lastItem = array.LastItem();Но я никак не могу в extension methods, покажите, пожалуйста, как это сделать.
Еще, хочу сделать класс Stack, который будет реализовать функции стека и будет иметь методы push() и pop(), но стек может хранить разные данные (но все одного типа), для этого, как я понял, нужны Generics, которые опять же я не могу осилить, как реализовать что-то типа
class Stack
{
private List <вот тут как-то указывать тип> stack;
Stack()
{
this.stack = new Stack <тип>();
}
public void push(<тут тип, который был указан при создании экземпляра класса> item)
{
this.stack.Add(item);
}
public void pop()
{
this.stack.RemoveAt(stack.Count-1);
}
}Как это сделать? Чтобы использовать
var stack = new Stack <float>();
stack.push(3.14);
stack.push(5.63);
stack.pop();
stack.pop();Прошу подсказать, чтобы было от чего оттолкнутся, а то во всех доках из гугла все запутанно и нихера не понятно, заранее спасибо.
Отредактировано Babusha (30-09-11 00:34:40)
Удовлетворен GNU/Linux (с) Linups_Troolvalds
13-значный пароль, состоящий из одних цифр, ломается за полчаса (с) Rector. Авторитетный Хакер у себя в классе
Я тебя просто отсюда выпилю. (с) Рехтур. Взламывает анусы по ойпи.
Вне форума


Хочу я получит последний элемент массива
Но я никак не могу в extension methods
Нуу... в приницпе, можно создать собственный класс-массив, который будет наследовать базовый класс-массив. Что-то вроде:
class MyArray: Array
{
...
}
Но, если честно, как раз в реализации таких "простеньких" классов больше всего мороки. Придётся написать кучу дополнительного кода, чтобы в конце концов добиться нужного результата.
Я не игрушечный. Я, б*я, коллекционный! (с) Duke Nukem Forever
Я не специалист по [вставить название]. Мне главное концептуально решить задачу! (с) АхаRu.
Линукс - это альтернативная ОС о которой известно, что она не является ОС ну вот просто ни разу. (с) Linups_Troolvalds.
А с какого такого перепугу пользователей линукса должно быть больше 1%? (с) petrun
Вне форума


Нуу... в приницпе, можно создать собственный класс-массив, который будет наследовать базовый класс-массив. Что-то вроде:
Если я правильно понимаю мсдн, то нельзя:
Класс Array является базовым для реализаций языка, поддерживающих работу с массивами. Тем не менее, явно наследовать от класса Array может только система и компиляторы. Пользователи должны применять конструкции массивов, предоставляемые языком программирования.
Ну на мой взгляд засорение происходит от установки/удаления програм, использования програм, и просто самих ошибок в по.На опере когдато(не понмю точно) был глюк когда она с каждым днём жрала памятивсё больше.здесь принцип очень похож.используя какой либо софт в виндовсе он портится.у меня реально рекорд 1.5 года на ХР без переустановки. © OpenMind
Вне форума


MOP3E,
msdn.microsoft.com/ru-ru/library/bb383977.aspx
А вот в доке от майкрасофта есть пример
namespace ExtensionMethods
{
public static class MyExtensions
{
public static int WordCount(this String str)
{
return str.Split(new char[] { ' ', '.', '?' },
StringSplitOptions.RemoveEmptyEntries).Length;
}
}
}using ExtensionMethods;string s = "Hello Extension Methods";
int i = s.WordCount();Только я не могу понять, как такое сделать для List, так же List использует Generics, которые же я не могу осилить.
Отредактировано Babusha (30-09-11 00:39:56)
Удовлетворен GNU/Linux (с) Linups_Troolvalds
13-значный пароль, состоящий из одних цифр, ломается за полчаса (с) Rector. Авторитетный Хакер у себя в классе
Я тебя просто отсюда выпилю. (с) Рехтур. Взламывает анусы по ойпи.
Вне форума


Ну, тогда можно забабахать какой-нибудь класс с массивом внутри и индексаторами снаружи...
Я не игрушечный. Я, б*я, коллекционный! (с) Duke Nukem Forever
Я не специалист по [вставить название]. Мне главное концептуально решить задачу! (с) АхаRu.
Линукс - это альтернативная ОС о которой известно, что она не является ОС ну вот просто ни разу. (с) Linups_Troolvalds.
А с какого такого перепугу пользователей линукса должно быть больше 1%? (с) petrun
Вне форума


Ну, тогда можно забабахать какой-нибудь класс с массивом внутри и индексаторами снаружи...
Ну блин, а зачем тогда были придуманы extension methods? По идее с ключевым словом "this" у меня все должно элементарно получится, как в примере майкрасофта с методом для String WordCount(), только не имею представления как это реализовать.
Отредактировано Babusha (30-09-11 00:44:13)
Удовлетворен GNU/Linux (с) Linups_Troolvalds
13-значный пароль, состоящий из одних цифр, ломается за полчаса (с) Rector. Авторитетный Хакер у себя в классе
Я тебя просто отсюда выпилю. (с) Рехтур. Взламывает анусы по ойпи.
Вне форума


Ну блин, а зачем тогда были придуманы extension methods?
Дай ссылку на статью, завтра попробую реализовать, если время свободное на работе будет.
Я не игрушечный. Я, б*я, коллекционный! (с) Duke Nukem Forever
Я не специалист по [вставить название]. Мне главное концептуально решить задачу! (с) АхаRu.
Линукс - это альтернативная ОС о которой известно, что она не является ОС ну вот просто ни разу. (с) Linups_Troolvalds.
А с какого такого перепугу пользователей линукса должно быть больше 1%? (с) petrun
Вне форума


Дай ссылку на статью, завтра попробую реализовать, если время свободное на работе будет.
msdn.microsoft.com/ru-ru/library/bb383977.aspx , вот, пожалуйста, а вот на английском msdn.microsoft.com/en-us/library/bb383977.aspx.
А будут идеи насчет класса Stack и как впихнуть туда генериксы?
Добавлено спустя 11 мин 34 с:
Ура! Покопался в ЛС, когда-то давно у Тифона спрашивал про generics, нашел ссылку msdn.microsoft.com/en-us/library/ms379564(v=vs.80).aspx , русский гугл, гад, на английские доки от майкрасофта редко выводит, там полное описание использования generics, плюс, какое офигенное совпадение, там как пример, используется стек
, все спасибо большое! Неясно только самое первое.
Удовлетворен GNU/Linux (с) Linups_Troolvalds
13-значный пароль, состоящий из одних цифр, ломается за полчаса (с) Rector. Авторитетный Хакер у себя в классе
Я тебя просто отсюда выпилю. (с) Рехтур. Взламывает анусы по ойпи.
Вне форума


Во-первых, у массива уже есть метод Last, который возвращает последний элемент последовательности.
Во-вторых, усё работает. Прожект из двух файлов:
ExtensionMetods.cs
namespace ExtensionMetods
{
public static class ExtensionMetods
{
public static int LastItem(this int[] arr)
{
return arr[arr.Length - 1];
}
}
}Program.cs
using System;
using ExtensionMetods;
namespace ExtensionMetodsProbe
{
class Program
{
static void Main(string[] args)
{
int[] MyInt = {1, 2, 3, 4};
Console.WriteLine(MyInt.LastItem());
Console.ReadLine();
}
}
}Я не игрушечный. Я, б*я, коллекционный! (с) Duke Nukem Forever
Я не специалист по [вставить название]. Мне главное концептуально решить задачу! (с) АхаRu.
Линукс - это альтернативная ОС о которой известно, что она не является ОС ну вот просто ни разу. (с) Linups_Troolvalds.
А с какого такого перепугу пользователей линукса должно быть больше 1%? (с) petrun
Вне форума


MOP3E, если честно, меня интересовало List, который вроде-бы с обычными массивами не одно и тоже, List позволяет сделать динамический массив, плюс, в перечни msdn.microsoft.com/en-us/library/6sh2ey19.aspx нету методов таких (LastItem и LastItemIndex).
Добавлено спустя 33 мин 47 с:
Вот, если кому интересно, вот как я реализовал Stack
class Stack <Type>
{
public int Size;
private List <Type> stack;
public Stack()
{
this.stack = new List<Type>();
}
public void Push(Type item)
{
this.stack.Add(item);
this.Size = this.stack.Count;
}
public void Pop()
{
this.stack.RemoveAt(this.stack.Count-1);
this.Size = this.stack.Count;
}
public Type FirstItem()
{
return this.stack[0];
}
public Type LastItem()
{
return this.stack[this.stack.Count-1];
}
}Добавлено спустя 1 ч 35 мин 56 с:
У кого-то будут мысли что делать с List?
Отредактировано Babusha (30-09-11 01:07:28)
Удовлетворен GNU/Linux (с) Linups_Troolvalds
13-значный пароль, состоящий из одних цифр, ломается за полчаса (с) Rector. Авторитетный Хакер у себя в классе
Я тебя просто отсюда выпилю. (с) Рехтур. Взламывает анусы по ойпи.
Вне форума


MOP3E, если честно, меня интересовало List, который вроде-бы с обычными массивами не одно и тоже, List позволяет сделать динамический массив, плюс, в перечни msdn.microsoft.com/en-us/library/6sh2ey19.aspx нету методов таких (LastItem и LastItemIndex).
С листом не пробовал. Одномерный массив можно ресайзить без потери содержимого при помощи функции Array.Resize(), что в сочетании с расширенными методами позволит сделать его ну почти как лист.
Я не игрушечный. Я, б*я, коллекционный! (с) Duke Nukem Forever
Я не специалист по [вставить название]. Мне главное концептуально решить задачу! (с) АхаRu.
Линукс - это альтернативная ОС о которой известно, что она не является ОС ну вот просто ни разу. (с) Linups_Troolvalds.
А с какого такого перепугу пользователей линукса должно быть больше 1%? (с) petrun
Вне форума
Babusha, наконец-то ты заговорил на читабельном и многим понятном языке хД Молодец, мозги развивает. Что пишешь в целом то?
Интеллигент боится лишь одного — касаться темы зла и его корней, потому что справедливо полагает, что здесь его могут сразу выeбaть телеграфным столбом.©
Вне форума


С листом не пробовал. Одномерный массив можно ресайзить без потери содержимого при помощи функции Array.Resize(), что в сочетании с расширенными методами позволит сделать его ну почти как лист.
www.dotnetperls.com/array-resize
Тут написано, что имеет проблемы с производительностью.
Babusha, наконец-то ты заговорил на читабельном и многим понятном языке хД Молодец, мозги развивает. Что пишешь в целом то?
Решил сделать няшный язык программирования на основе бреинфака, только с блекджеком и шлюхами, сейчас пишу интерпретатор байткода (виртуальную машину), чуть позже - компилятор.
MOP3E, вот попробовал сделать с листом
using System;
using System.Collections.Generic;
using ExtensionMethods;
namespace ExtensionMethods
{
public static class MyExtensions
{
public static string LastItem(this List <string> array)
{
return array[array.Count-1];
}
}
}
namespace extensionmethods
{
class MainClass
{
public static void Main (string[] args)
{
var array = new List <string> ();
array.Add("олололо");
array.Add("я послений элемент этого массива");
Console.WriteLine(array.LastItem());
}
}
}
Но черт, а генериксы впихнуть не получается, (вот моя попытка)
using System;
using System.Collections.Generic;
using ExtensionMethods;
namespace ExtensionMethods
{
public static class MyExtensions <Type>
{
public static Type LastItem (this List <Type> array)
{
return array[array.Count-1];
}
}
}
namespace extensionmethods
{
class MainClass
{
public static void Main (string[] args)
{
var array = new List <string> ();
array.Add("олололо");
array.Add("я послений элемент этого массива");
Console.WriteLine(array.LastItem());
}
}
}Но мне пишет, что метода расширения должны определятся в небазовом статическом классе в строке
public static class MyExtensions <Type>Добавлено спустя 41 мин 41 с:
Секундочку, стоп, а везде this указывать, когда хочу обратится к полю класса или методу обязательно?
Добавлено спустя 1 ч 05 мин 09 с:
А вот в руби можно делать необязательные аргументы, как бы такое сделать в шарпе?
def method(arg = 10)
puts arg
end
method 100500 # => 100500
method() # => 10Добавлено спустя 1 ч 13 мин 23 с:
Опа, вот так работает -
using System;
namespace Test
{
class Ololo
{
public static int test(int arg = 10)
{
return arg;
}
public static void Main(String[] args)
{
Console.WriteLine(test(50));
Console.WriteLine(test());
}
}
}Удовлетворен GNU/Linux (с) Linups_Troolvalds
13-значный пароль, состоящий из одних цифр, ломается за полчаса (с) Rector. Авторитетный Хакер у себя в классе
Я тебя просто отсюда выпилю. (с) Рехтур. Взламывает анусы по ойпи.
Вне форума
Babusha, я что-то упустил в своей жизни.. Бабуша пишет компилятор.. ебануцца. Ростут же дети :-D Тебе компанию составить? У меня опыт в шарпах уже имеется не большой + опыт глобальный. Завтра буду выходной, можем вместе поковырять это дело.
Интеллигент боится лишь одного — касаться темы зла и его корней, потому что справедливо полагает, что здесь его могут сразу выeбaть телеграфным столбом.©
Вне форума


Babusha, я что-то упустил в своей жизни.. Бабуша пишет компилятор.. ебануцца. Ростут же дети :-D Тебе компанию составить? У меня опыт в шарпах уже имеется не большой + опыт глобальный. Завтра буду выходной, можем вместе поковырять это дело.
Вот черт, я сегодня уезжаю и буду только в вечер воскресенья
, есть только пару чЯсиков сейчас.
Кстати, а дайте кто-то совет, это хорошо или плохо делать очень длинные имена переменным и методам? А то получается типа JumpToByteCodeIndexWithOffsetAdress() или BrainfuckByteCodeCommand["+"], с одной стороны, полностью очевидно и ясно для чего эта переменная или метод и что она хранит или что метод делает, но с другой стороны, получается очень длиино, как поступать? Просто в руби не принято делать длинные имена переменным, и все закончилось бы просто jump_to() bf_cmd(), но мне так не нравится.
Отредактировано Babusha (30-09-11 14:27:19)
Удовлетворен GNU/Linux (с) Linups_Troolvalds
13-значный пароль, состоящий из одних цифр, ломается за полчаса (с) Rector. Авторитетный Хакер у себя в классе
Я тебя просто отсюда выпилю. (с) Рехтур. Взламывает анусы по ойпи.
Вне форума
Babusha, я ща похапе ипу. Лука обещал ящик пива :-D Ну давай в воскр. Правда я буду опять на работе.. нетбук с маленьким экраном, засраная хрюша, С# Девелоп/Моно.. бррр Дома серверная семерка(со включенным Аэро), полноценная Визуал Студия..ммм.. с лицензией
Ну ниче, покодим:-)
Добавлено спустя 02 мин 22 с:
Babusha, имена лучше давать чуть короче, но так, чтоб их можно было легко узнать и отличить друг от друга. А там, где ты их определяешь, просто оставляй комментарий, что и к чему. Опыт 'брейнфака' на перле приучил к комментариям 
Интеллигент боится лишь одного — касаться темы зла и его корней, потому что справедливо полагает, что здесь его могут сразу выeбaть телеграфным столбом.©
Вне форума


Кстати, а дайте кто-то совет, это хорошо или плохо делать очень длинные имена переменным и методам?
Делай для них XML-комментарии. Те, которые начинаются с "///". И у тебя всегда будут русскоязычные подсказки что та или иная переменная означает.
Я не игрушечный. Я, б*я, коллекционный! (с) Duke Nukem Forever
Я не специалист по [вставить название]. Мне главное концептуально решить задачу! (с) АхаRu.
Линукс - это альтернативная ОС о которой известно, что она не является ОС ну вот просто ни разу. (с) Linups_Troolvalds.
А с какого такого перепугу пользователей линукса должно быть больше 1%? (с) petrun
Вне форума
MOP3E, с этого места подробнее. Что за комментарии такие?
Интеллигент боится лишь одного — касаться темы зла и его корней, потому что справедливо полагает, что здесь его могут сразу выeбaть телеграфным столбом.©
Вне форума
Lord_Evil, club.shelek.ru/viewart.php?id=164
Вне форума
Дестер, спасибо) Буду юзать.
Интеллигент боится лишь одного — касаться темы зла и его корней, потому что справедливо полагает, что здесь его могут сразу выeбaть телеграфным столбом.©
Вне форума


MOP3E, с этого места подробнее. Что за комментарии такие?
В C# на предыдущей строчке перед объявлением функции или переменной пишешь "///" - и вуаля! Готовый шаблон для камментов, которые потом отображаются как всплывающая подсказка во всех местах, где ты эту функцию или переменную используешь. Ну, и ещё на их основе можно автоматическую документацию делать. Если, конечно, не полениться написать эти камменты.
/// <summary>
/// Расширенный метод для массива, возвращающий значение последнего элемента
/// </summary>
/// <param name="arr">Массив, для которого нужно получить последний элемент</param>
/// <returns>Возвращает последний элемент массива</returns>
public static int LastItem(this int[] arr)
{
return arr[arr.Length - 1];
}Отредактировано MOP3E (30-09-11 20:26:45)
Я не игрушечный. Я, б*я, коллекционный! (с) Duke Nukem Forever
Я не специалист по [вставить название]. Мне главное концептуально решить задачу! (с) АхаRu.
Линукс - это альтернативная ОС о которой известно, что она не является ОС ну вот просто ни разу. (с) Linups_Troolvalds.
А с какого такого перепугу пользователей линукса должно быть больше 1%? (с) petrun
Вне форума


Ребята? Вы че?!
Просто добавьте Linq в using и используйте уже готовый
array.Last();array.First();Полный пример:
msdn.microsoft.com/en-us/library/bb358775.aspx
Вот список всех экстеншенов из Linq
msdn.microsoft.com/en-us/library/system … rable.aspx
P.S. Скажу свое "НЕТ" изобретателям велосипедов...
Квантовая механика - "малопонятный математический курьёз" (с) msAVA - современный учитель.
Вне форума


P.S. Скажу свое "НЕТ" изобретателям велосипедов...
Да пусть тренируется, жалко что ли? Все когда-то так начинали.
Я не игрушечный. Я, б*я, коллекционный! (с) Duke Nukem Forever
Я не специалист по [вставить название]. Мне главное концептуально решить задачу! (с) АхаRu.
Линукс - это альтернативная ОС о которой известно, что она не является ОС ну вот просто ни разу. (с) Linups_Troolvalds.
А с какого такого перепугу пользователей линукса должно быть больше 1%? (с) petrun
Вне форума
MOP3E, отлично, для больших проектов, особенно коммандных волбще класс.
Tiphon, готовся - в воскресенья я и Бабуша бедем иметь секас с твоим мозгом хД хД хД Есть шанс, что это станет перманентным событием.. подумываю начать серьезную деятельность на С#
Интеллигент боится лишь одного — касаться темы зла и его корней, потому что справедливо полагает, что здесь его могут сразу выeбaть телеграфным столбом.©
Вне форума


Tiphon, ну блииин, это же был почти учебный пример, вот скажи, как скрестить List extension methods и Generics?
Удовлетворен GNU/Linux (с) Linups_Troolvalds
13-значный пароль, состоящий из одних цифр, ломается за полчаса (с) Rector. Авторитетный Хакер у себя в классе
Я тебя просто отсюда выпилю. (с) Рехтур. Взламывает анусы по ойпи.
Вне форума
[ Сгенерировано за 0.012 сек, 7 запросов выполнено - Использовано памяти: 1.82 Мбайт (Пик: 1.9 Мбайт) ]