Еще пара вопросов по шарпу (Страница 1) / Программирование / Форум StopLinux

Объявление

Kwork.ru - услуги фрилансеров от 500 руб.

#1 30-09-11 01:24:34

Babusha
Нехристь
Зарегистрирован: 12-03-10
Сообщений: 2,160
Windows 7Opera 11.51

Еще пара вопросов по шарпу

Хочу я получит последний элемент массива

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 01:34:40)

Неактивен

#2 30-09-11 01:38:48

Babusha
Нехристь
Зарегистрирован: 12-03-10
Сообщений: 2,160
Windows 7Opera 11.51

Re: Еще пара вопросов по шарпу

MOP3E,
https://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 01:39:56)

Неактивен

#3 30-09-11 01:43:48

Babusha
Нехристь
Зарегистрирован: 12-03-10
Сообщений: 2,160
Windows 7Opera 11.51

Re: Еще пара вопросов по шарпу

MOP3E пишет:

Ну, тогда можно забабахать какой-нибудь класс с массивом внутри и индексаторами снаружи...

Ну блин, а зачем тогда были придуманы extension methods? По идее с ключевым словом "this" у меня все должно элементарно получится, как в примере майкрасофта с методом для String WordCount(), только не имею представления как это реализовать.

Редактировался Babusha (30-09-11 01:44:13)

Неактивен

#4 30-09-11 01:48:24

Babusha
Нехристь
Зарегистрирован: 12-03-10
Сообщений: 2,160
Windows 7Opera 11.51

Re: Еще пара вопросов по шарпу

MOP3E пишет:

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

https://msdn.microsoft.com/ru-ru/library/bb383977.aspx , вот, пожалуйста, а вот на английском https://msdn.microsoft.com/en-us/library/bb383977.aspx.

А будут идеи насчет класса Stack и как впихнуть туда генериксы?

Добавлено спустя 11 мин 34 с:
Ура! Покопался в ЛС, когда-то давно у Тифона спрашивал про generics, нашел ссылку https://msdn.microsoft.com/en-us/library … s.80).aspx , русский гугл, гад, на английские доки от майкрасофта редко выводит, там полное описание использования generics, плюс, какое офигенное совпадение, там как пример, используется стек smile, все спасибо большое! Неясно только самое первое.

Неактивен

#5 30-09-11 02:06:39

Babusha
Нехристь
Зарегистрирован: 12-03-10
Сообщений: 2,160
Windows 7Opera 11.51

Re: Еще пара вопросов по шарпу

MOP3E, если честно, меня интересовало List, который вроде-бы с обычными массивами не одно и тоже, List позволяет сделать динамический массив, плюс, в перечни https://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 02:07:28)

Неактивен

#6 30-09-11 11:16:49

Lord_Evil
Master Of Darkness
Из Deepest Pits Of Hell
Зарегистрирован: 06-06-10
Сообщений: 1,887
Сайт
LinuxOpera 11.10

Re: Еще пара вопросов по шарпу

Babusha, наконец-то ты заговорил на читабельном и многим понятном языке хД Молодец, мозги развивает. Что пишешь в целом то?


Интеллигент боится лишь одного — касаться темы зла и его корней, потому что справедливо полагает, что здесь его могут сразу выeбaть телеграфным столбом.©

Неактивен

#7 30-09-11 13:38:14

Babusha
Нехристь
Зарегистрирован: 12-03-10
Сообщений: 2,160
Windows 7Opera 11.51

Re: Еще пара вопросов по шарпу

MOP3E пишет:

С листом не пробовал. Одномерный массив можно ресайзить без потери содержимого при помощи функции Array.Resize(), что в сочетании с расширенными методами позволит сделать его ну почти как лист.

https://www.dotnetperls.com/array-resize
Тут написано, что имеет проблемы с производительностью.

Lord_Evil пишет:

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());
                }
        }
}

Неактивен

#8 30-09-11 15:02:55

Lord_Evil
Master Of Darkness
Из Deepest Pits Of Hell
Зарегистрирован: 06-06-10
Сообщений: 1,887
Сайт
LinuxOpera 11.10

Re: Еще пара вопросов по шарпу

Babusha, я что-то упустил в своей жизни.. Бабуша пишет компилятор.. ебануцца. Ростут же дети :-D Тебе компанию составить? У меня опыт в шарпах уже имеется не большой + опыт глобальный. Завтра буду выходной, можем вместе поковырять это дело.


Интеллигент боится лишь одного — касаться темы зла и его корней, потому что справедливо полагает, что здесь его могут сразу выeбaть телеграфным столбом.©

Неактивен

#9 30-09-11 15:27:00

Babusha
Нехристь
Зарегистрирован: 12-03-10
Сообщений: 2,160
Windows 7Opera 11.51

Re: Еще пара вопросов по шарпу

Lord_Evil пишет:

Babusha, я что-то упустил в своей жизни.. Бабуша пишет компилятор.. ебануцца. Ростут же дети :-D Тебе компанию составить? У меня опыт в шарпах уже имеется не большой + опыт глобальный. Завтра буду выходной, можем вместе поковырять это дело.

Вот черт, я сегодня уезжаю и буду только в вечер воскресенья sad, есть только пару чЯсиков сейчас.

Кстати, а дайте кто-то совет, это хорошо или плохо делать очень длинные имена переменным и методам? А то получается типа JumpToByteCodeIndexWithOffsetAdress() или BrainfuckByteCodeCommand["+"], с одной стороны, полностью очевидно и ясно для чего эта переменная или метод и что она хранит или что метод делает, но с другой стороны, получается очень длиино, как поступать? Просто в руби не принято делать длинные имена переменным, и все закончилось бы просто jump_to() bf_cmd(), но мне так не нравится.

Редактировался Babusha (30-09-11 15:27:19)

Неактивен

#10 30-09-11 15:42:21

Lord_Evil
Master Of Darkness
Из Deepest Pits Of Hell
Зарегистрирован: 06-06-10
Сообщений: 1,887
Сайт
LinuxOpera 11.10

Re: Еще пара вопросов по шарпу

Babusha, я ща похапе ипу. Лука обещал ящик пива :-D Ну давай в воскр. Правда я буду опять на работе.. нетбук с маленьким экраном, засраная хрюша, С# Девелоп/Моно.. бррр Дома серверная семерка(со включенным Аэро), полноценная Визуал Студия..ммм.. с лицензией big_smile Ну ниче, покодим:-)

Добавлено спустя 02 мин 22 с:
Babusha, имена лучше давать чуть короче, но так, чтоб их можно было легко узнать и отличить друг от друга. А там, где ты их определяешь, просто оставляй комментарий, что и к чему. Опыт 'брейнфака' на перле приучил к комментариям big_smile


Интеллигент боится лишь одного — касаться темы зла и его корней, потому что справедливо полагает, что здесь его могут сразу выeбaть телеграфным столбом.©

Неактивен

#11 30-09-11 19:14:49

Lord_Evil
Master Of Darkness
Из Deepest Pits Of Hell
Зарегистрирован: 06-06-10
Сообщений: 1,887
Сайт
LinuxOpera 11.10

Re: Еще пара вопросов по шарпу

MOP3E, с этого места подробнее. Что за комментарии такие?


Интеллигент боится лишь одного — касаться темы зла и его корней, потому что справедливо полагает, что здесь его могут сразу выeбaть телеграфным столбом.©

Неактивен

#12 30-09-11 19:32:12

Дестер
Капитан
Зарегистрирован: 09-11-10
Сообщений: 705
Сайт
Windows 7Chrome 14.0.835.186

Re: Еще пара вопросов по шарпу

Неактивен

#13 30-09-11 19:49:36

Lord_Evil
Master Of Darkness
Из Deepest Pits Of Hell
Зарегистрирован: 06-06-10
Сообщений: 1,887
Сайт
LinuxOpera 11.10

Re: Еще пара вопросов по шарпу

Дестер, спасибо) Буду юзать.


Интеллигент боится лишь одного — касаться темы зла и его корней, потому что справедливо полагает, что здесь его могут сразу выeбaть телеграфным столбом.©

Неактивен

#14 30-09-11 22:18:06

Tiphon
Участник
Зарегистрирован: 08-07-10
Сообщений: 2,354
Windows 7Opera 11.51

Re: Еще пара вопросов по шарпу

Ребята? Вы че?!

Просто добавьте Linq в using и используйте уже готовый

array.Last();
array.First();

Полный пример:
https://msdn.microsoft.com/en-us/library/bb358775.aspx

Вот список всех экстеншенов из Linq
https://msdn.microsoft.com/en-us/library … rable.aspx

P.S. Скажу свое "НЕТ" изобретателям велосипедов...


Квантовая механика - "малопонятный математический курьёз" (с) msAVA - современный учитель.

Неактивен

#15 30-09-11 23:20:19

Lord_Evil
Master Of Darkness
Из Deepest Pits Of Hell
Зарегистрирован: 06-06-10
Сообщений: 1,887
Сайт
LinuxOpera 11.10

Re: Еще пара вопросов по шарпу

MOP3E, отлично, для больших проектов, особенно коммандных волбще класс.
Tiphon, готовся - в воскресенья я и Бабуша бедем иметь секас с твоим мозгом хД хД хД Есть шанс, что это станет перманентным событием.. подумываю начать серьезную деятельность на С#


Интеллигент боится лишь одного — касаться темы зла и его корней, потому что справедливо полагает, что здесь его могут сразу выeбaть телеграфным столбом.©

Неактивен

#16 03-10-11 20:44:20

Babusha
Нехристь
Зарегистрирован: 12-03-10
Сообщений: 2,160
Windows 7Opera 11.51

Re: Еще пара вопросов по шарпу

Tiphon, ну блииин, это же был почти учебный пример, вот скажи, как скрестить List extension methods и Generics?

Неактивен

Kwork.ru - услуги фрилансеров от 500 руб.
Мой VPS с 2016 года !
✅ Виртуальные от 300 ₽/месяц, RAM 1-10GB, DISK 20-360 GB;
✅ Выделенные от 3000 ₽/месяц. RAM 4-64GB, DISK до 4TB;
✅ Intel Xeon, SSD, XEN, iLO/KVM, Windows/Linux, Администрирование;
✅ Бесплатно Full Backup и Anti-DDoS.





Подвал форума

Под управлением FluxBB
Модифицировал Visman

Яндекс.Метрика