Пользователей: 0
Гостей: 317
Всего: 317

» Подробно
» Сегодня


Привет, Гость!

Ник


Пароль


Запомнить?




» Добавить в избранное

» Сделать стартовой

Главная
Форум
Обзор игры
Мир Зоны
Файлы
Галерея
Разное






Форумы > Специализированные > Hard & Soft > Программирование на C# (C Sharp)

Страница 6 из 9Первая«3456789 »Последняя
Быстрый переход:


 

Автор Сообщение
singapur22
[10] Житель
Онлайн статус=0  Профиль    




Посты: 2089
Откуда: Рубцовск
Занятие: Проект "Мобила модмейкера"
Возраст: 44

13-08-2011
08-04-2010 07:41 GMT3 часа #1220647   Split
Сталкер Монолита Это зависит от твоей соображалки. Для начала установи Visual C# Express Editor 2008. Ссылку найдёшь на первой странице. Почитай MSDN. Ссылку найдёшь там же. Попрактикуйся немного. А там уже сам решай, стоит его изучать, или нет. Если всётаки решишь продолжить его изучение, то конечно помогать будем по мере собственных знаний.


Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
erlik
[10] Житель
Онлайн статус=0  Профиль    




Посты: 2338
Откуда: Набережные Челны
Занятие: В чем сила, брат? В AutoIT3 и WinAPI.
Возраст: 47

18-03-2015
08-04-2010 17:21 GMT3 часа #1220791   Split
singapur22
Ты вроде с коллекцией List <T> разобрался - поясни мне пожалуйста что означает вот такое его конструирование

Код:
public class Student
    {
        public string First { get; set; }  //get  set до сих пор не знаю зачем и как использовать 
        public string Last { get; set; }
        public int ID { get; set; }
        public List<int> Scores;
    }


    public static List<Student> GetStudents()

      {
   
        List<Student> students = new List<Student>
   
         {
           new Student {First="Svetlana", Last="Omelchenko", ID=111, Scores= new List<int> {97, 72, 81, 60}},
           new Student {First="Claire", Last="O'Donnell", ID=112, Scores= new List<int> {75, 84, 91, 39}},
           new Student {First="Sven", Last="Mortensen", ID=113, Scores= new List<int> {99, 89, 91, 95}},
           new Student {First="Cesar", Last="Garcia", ID=114, Scores= new List<int> {72, 81, 65, 84}},
           new Student {First="Debra", Last="Garcia", ID=115, Scores= new List<int> {97, 89, 85, 82}}
        };
   return students;
    }


я просто привык к List в таком виде
Код:
List<string> dinosaurs = new List<string>();

     dinosaurs.Add("Tyrannosaurus");
        dinosaurs.Add("Amargasaurus");
        dinosaurs.Add("Mamenchisaurus");
        dinosaurs.Add("Deinonychus");
        dinosaurs.Add("Compsognathus");


когда он заполняется через метод Add и при объявлении используется тип значений (int , string и т.д))а не ссылочный тип вроде Student.

Не могу понять что делает конструктор приведенный первым. Какой массив получается в итоге.

добавлено спустя 1 час 52 минут

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

сделал для теста свой более простой вариант:
Код:
public class MyList
    {
       public string name;
       public string family;
    }

    public static List<MyList> GetList()
    {
        List<MyList> list = new List<MyList>
       
        {
    new MyList {name= "Иван", family="Иванов"},
    new MyList {name= "Петр", family="Петров"},
    new MyList {name= "Сидор", family="Сидоров"},
    new MyList {name= "Алексей", family="Алексеев"},
    new MyList {name= "Сергей", family="Сергеев"},
    new MyList {name= "Василий", family="Васильев"}
        };
        return list;
  }


итерация по ней также как по обычной коллекции получается -
имя переменной перебора.имя ключа )

List<MyList> list = GetList();

foreach (var student in list)
{
Console.WriteLine("{0}, {1}", student.name, student.family);
}

только непонятно зачем в том примере использовались get и set - работает все без них и они там вообще никак не задействованы.

Сообщение было успешно отредактировано erlik (08-04-2010 17:21 GMT3 часа, назад)

Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
singapur22
[10] Житель
Онлайн статус=0  Профиль    




Посты: 2089
Откуда: Рубцовск
Занятие: Проект "Мобила модмейкера"
Возраст: 44

13-08-2011
08-04-2010 20:03 GMT3 часа #1220986   Split
erlik {get; set;} --это достаточно удобное контекстное выражение. Используется для задания свойств переменным. Например, простейшее использование, задание математического свойства определённой переменной:

Код:
private  int int1;
        public int int2
        {
            get
            {
                return int1;
            }
            set
            {
                int1 = value *5;
            }
        }
    }


Назначенные свойства таковы. При считывании значения переменной int2 будем всегда получать значение равное установленному значению помноженному на 5.
Тоесть, если назначить переменной int2 значение равное 3, то при последующем считывании его значения получим 15.
Подобные контекстные выражения удобно использовать для создания и дальнейшего использования скрытых математических формул, используемых в точечных местах кода.

Или ещё один способ применения. Можно использовать данное свойство, как математическое действие, с запретом возможности изменения значения через переменную свойсва:

Код:
public int1 = 5;

public int2
{
    get
    {
        return int1 * int1;
    }
}



В данном примере мы не использовали свойство set; Это приводит к тому, что назначить значение переменной int2 не возможно. Фактически, переменную int2 мы здесь используем как формулу математического действия над переменной int1.

И наконец третий пример. Используем только свойство set;

Код:
public int1;

public int2
{
    set
    {
        int1 = value * value;
    }
}


В данном примере переменная int2 используется как метод установки значения переменной int1. Считать соответственно значение с переменной int2 нельзя. Так как используется она как предварительное математическое действие над значением, перед установкой его переменной int1.
К сведенью. value -- это зарезервированное слово возвращающее значение переменной свойства, в теле которого оно используется.

Сообщение было успешно отредактировано singapur22 (08-04-2010 20:03 GMT3 часа, назад)

Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
erlik
[10] Житель
Онлайн статус=0  Профиль    




Посты: 2338
Откуда: Набережные Челны
Занятие: В чем сила, брат? В AutoIT3 и WinAPI.
Возраст: 47

18-03-2015
08-04-2010 20:05 GMT3 часа #1221023   Split
singapur22
Спасибо - теперь все стало понятно, а то раньше гадал - для чего эти выражения нужны - пояснений нигде не встречал.

Цитата
Ещё какието (LINQ to ...) видел

нарыл вот такие интерфейсы использующие linq запросы:
LINQ to Object - работает с коллекциями IEnumerable или IEnumerable<T> - методы в пространстве имен System.Linq
LINQ to XML пространство имен System.Xml
LINQ to ADO.NET - включает LINQ to SQL и LINQ to DataSet
LINQ to SQL - используются те же методы System.Linq только в отношении баз данных SQL
LINQ to DataSet - запросы к данным, кэшированным в объекте DataSet.

вчера безуспешно пытался провернуть операцию сортировки данных по алфавиту в массиве через запросы linq - ничего так и не вышло. Пробовал через group by
зато получилось через Array.Sort()
всего одна строчка и массив отсортирован
Array.Sort(students,(p1, p2) => p1.CompareTo(p2));

Разобрался почти со всеми методами Linq to Object кроме предложений join и group
Ты как с запросами linq уже работал? Если есть примерчики - выкладывай


Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
singapur22
[10] Житель
Онлайн статус=0  Профиль    




Посты: 2089
Откуда: Рубцовск
Занятие: Проект "Мобила модмейкера"
Возраст: 44

13-08-2011
08-04-2010 20:20 GMT3 часа #1221041   Split
erlik С Linq не работал, поэтому ничего нового сообщить не могу.

А на счёт сортировки, имеется ещё тройка классов использующих данное свойсво. Такие как:

SortedList // Предоставляет коллекцию пар "ключ-значение", упорядоченных по ключам. Доступ к парам можно получить по ключу и по индексу.

SortedList<Tkey, Tvalue> //Представляет коллекцию пар "ключ-значение", упорядоченных по ключу на основе связанной реализации System.Collections.Generic.IComparer<T>.

SortedDictionary<Tkey, Tvalue> //Представляет коллекцию пар "ключ-значение", отсортированную по ключу.

Имеются также базовые классы и интерфейсы, для реализации расширенных классов на основе данных свойств.


Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
erlik
[10] Житель
Онлайн статус=0  Профиль    




Посты: 2338
Откуда: Набережные Челны
Занятие: В чем сила, брат? В AutoIT3 и WinAPI.
Возраст: 47

18-03-2015
08-04-2010 20:47 GMT3 часа #1221071   Split
singapur22
Неуниверсальный вариант SortedList я как то тестил.
упорядочивает всю коллекцию в момент заполнения - причем можно хоть цифры делать ключами - тогда по числовому возрастанию сортирует, хоть буквы - тогда по порядку букв в алфавите.а если слова разные использовать тогда фиг знает как отсортирует.

SortedList SL = new SortedList();
//добавляем в коллекцию значения и ключи
SL.Add("a","отговорила");
SL.Add("c","роща");
SL.Add("b","золотая");
SL.Add("e","березовым");
SL.Add("f","зеленым");
SL.Add("g","языком");

вот здесь второе и третье слова местами поменяются. Я еще сначала не понимал почему у меня значения местами меняются

foreach (DictionaryEntry kvp in SL)
{
Console.WriteLine("Key = {0}, Value = {1}", kvp.Key, kvp.Value);
}
Console.ReadKey();



но мне было интересно именно через linq сделать.


Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
singapur22
[10] Житель
Онлайн статус=0  Профиль    




Посты: 2089
Откуда: Рубцовск
Занятие: Проект "Мобила модмейкера"
Возраст: 44

13-08-2011
08-04-2010 22:17 GMT3 часа #1221118   Split
erlik Это конечно всё хорошо, но у меня другая тема. Пытаюсь решить одну проблему. Пока без успешно. Кароче мне нужно, чтобы при инициализации дочернего класса, инициализатор базового класса не читался. Хотя такое наверно сделать невозможно. Но я вполне уверен, что можно задать какието условия, которые будут определять создание объекта произведено непосредственно с базового класса, или из дочернего. При этом, чтобы условия эти производились перед чтением инициализаторов. Приведу небольшой пример, чтобы было понятней, что я имею ввиду.
Имеется например два класса "BaseClass" и "DocherClass".

Код:
class BaseClass
{
    public BaseClass()
    {
        //заносим объект в таблицу
    }
}

class DocherClass : BaseClass
{
    public DocherClass()
    {
        //заносим объект в таблицу
    }
}


При создании объекта того, или иного класса, он (объект) регистрируется в определённой таблице.
Оба класса могут использоваться по отдельности. Тоесть могут создаваться объекты как BaseClass класса, так и DocherClass класса по отдельности.
Проблема заключается в том, что при создании объекта дочернего класса, в таблице производится регистрация двух объектов (объекта класса BaseClass и объекта класса DocherClass). Мне же нужно, чтобы при создании объекта DocherClass класса, базовый объект не регистрировался. Испробывал всё, но в связи с тем, что при создании объекта дочернего класса, сначала производится инициализация базового класса, а уже после, дочернего. Из-за чего нет возможности задавать условия регистрации из дочернего класса.
Но может можно както определить в базовом классе, что создаётся именно объект дочернего класса, а не базового?

добавлено спустя 50 минут

//////////////////////////////////////////////////////////////

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

Код:
class BaseClass
{
    protected BaseClass() {}

    public BaseClass(string name)
    {
        //заносим объект в таблицу
    }
}

class DocherClass : BaseClass
{
    public DocherClass(string name)
    {
        //заносим объект в таблицу
    }
}


Как видно из кода, пришлось добавить обязательный аргумент, который разделяет два конструктора с модификаторами protected и public.
К сведенью: Модификатор protected ограничивает доступ к методу или в данном случае, к конструктору, содержащим классом или типами, которые являются производными от содержащего класса. Тоесть, при создании объекта класса DocherClass будет производиться инициализация класса BaseClass через конструктор protected BaseClass(), в то время если создавать объект класса BaseClass, его инициализация будет производиться только через конструктор public BaseClass(string name).

Вот если бы ещё был модификатор с уровнем доступности, только из внешних классов и сборок, то вообще бы всё было в ажуре. Можно было бы отказаться от обязательного аргумента.

Сообщение было успешно отредактировано singapur22 (08-04-2010 22:17 GMT3 часа, назад)

Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Cos
[20] Сталкер
Онлайн статус=0  Профиль    




Посты: 2692
Откуда:
Занятие:
Возраст:

08-04-2010 22:42 GMT3 часа #1221185   Split
singapur22
Я конечно не знаю всех тонкостей в наследовании С++/C#, но как насчет создания нескольких конструкторов для дочернего класса? В конструкторе по-умолчанию (public DocherClass()) будет производится только инициализация, без регистрации, а в доп. конструкторе (с какими-нибудь левыми параметрами для его дифференциации от констр. по-умолчанию) будет и инициализ. и регистрация.

добавлено спустя 3 минут

Цитата
Ффуууу! Наконецто решил свою проблему.

...Ну или вместо параметров дифференцировать конструкторы по их уровню доступности.

Сообщение было успешно отредактировано Cos (08-04-2010 22:42 GMT3 часа, назад)

erlik
[10] Житель
Онлайн статус=0  Профиль    




Посты: 2338
Откуда: Набережные Челны
Занятие: В чем сила, брат? В AutoIT3 и WinAPI.
Возраст: 47

18-03-2015
08-04-2010 22:52 GMT3 часа #1221203   Split
singapur22
ну видишь сам решил - я насчет protected хотел тебе написать да подумал может тебе не этот эффект который он дает вовсе нужен.

Цитата
Вот если бы ещё был модификатор с уровнем доступности, только из внешних классов и сборок

тебе нужен обратный по значению internal'у ?


Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
singapur22
[10] Житель
Онлайн статус=0  Профиль    




Посты: 2089
Откуда: Рубцовск
Занятие: Проект "Мобила модмейкера"
Возраст: 44

13-08-2011
08-04-2010 23:03 GMT3 часа #1221217   Split
erlik Internal не канает, так как является модификатором с совершенно другим типом доступности. Он ограничивает доступ в пределах сборки.

Cos
Цитата
дифференцировать конструкторы
Это как?


Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
erlik
[10] Житель
Онлайн статус=0  Профиль    




Посты: 2338
Откуда: Набережные Челны
Занятие: В чем сила, брат? В AutoIT3 и WinAPI.
Возраст: 47

18-03-2015
08-04-2010 23:15 GMT3 часа #1221221   Split
singapur22
так я и говорю - обратный по значению - но поковыряв книжку такого не нашел.

А я тоже свою проблемку (мелкую конечно) решил
оказывается в linq есть отличный метод который сортирует не только числа, но и строки

string[] students = { "Яковлев","Иванов", "Сидоров","Петров",
"Орлов", "Курочкин", "Шишкин" };

var list3 = students.OrderBy(z => z);
получаем список отсортированный по алфавиту - даже компаратор не нужен так как используется дефолтовый (хотя можно и свой указать).

Сообщение было успешно отредактировано erlik (08-04-2010 23:15 GMT3 часа, назад)

Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
singapur22
[10] Житель
Онлайн статус=0  Профиль    




Посты: 2089
Откуда: Рубцовск
Занятие: Проект "Мобила модмейкера"
Возраст: 44

13-08-2011
08-04-2010 23:53 GMT3 часа #1221222   Split
erlik
Цитата
но поковыряв книжку такого не нашел.
Вот в том то и проблема.

Цитата
А я тоже свою проблемку (мелкую конечно)


Молодец! Нам это тоже пригодится

Сообщение было успешно отредактировано singapur22 (08-04-2010 23:53 GMT3 часа, назад)

Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Cos
[20] Сталкер
Онлайн статус=0  Профиль    




Посты: 2692
Откуда:
Занятие:
Возраст:

08-04-2010 23:38 GMT3 часа #1221274   Split
singapur22
То что и было сделано здесь:

Цитата
Код:
class BaseClass
class BaseClass
{
    protected BaseClass() {}

    public BaseClass(string name)
    {
        //заносим объект в таблицу
    }
}

class DocherClass : BaseClass
{
    public DocherClass(string name)
    {
        //заносим объект в таблицу
    }
}



Т.е создавая второй конструктор с неким различием в параметрах от констр. по-умолчанию (в данньм случае с доп. параметром name) и позднее созданием объекта public DocherClass("lalala") компилятор при инициализ. конструктора базового класса будет искать "наиболее похожий" (мое предположение относительно C#, в C++ это делается ручками, т.е можно банально указать какой из конструкторов базового класса мы хотим вызвать) т.е. опять таки с одним параметром типа srting. И соотв. таким образом варьировать способы инициализ. конкретного класса.


singapur22
[10] Житель
Онлайн статус=0  Профиль    




Посты: 2089
Откуда: Рубцовск
Занятие: Проект "Мобила модмейкера"
Возраст: 44

13-08-2011
09-04-2010 00:53 GMT3 часа #1221295   Split
Cos
Цитата
в C++ это делается ручками, т.е можно банально указать какой из конструкторов базового класса мы хотим вызвать


А как это делается? Так же различия по аргументам, или можно создать конструкторы с разными именами и указывать конструктор с нужным именем?

Гы-гы! В C# оказывается тоже можно указывать конструктор

Типа так:

Код:
class BaseClass
{
    public BaseClass()
    {}
    public BaseClass(string name)
    {}
}

class DocherClass : BaseClass
{
    public DocherClass() : base()
    {}
    public DocherClass(string name) : base(name)
    {}
}


Вот и решилась моя проблема
Всё. Всем спасибо за помощь и поддержку.

добавлено спустя 31 минут

////////////////////////////////////////////////////////////////////

Итак. Получился такой демонстрационный код, поддерживающий наследование и занос в таблицу данных об объекте при конструировании именно из создаваемого объекта, а не из базового:

Код:
    public static class Table
    {
        public static List<string> table = new List<string>();
    }

    public class BaseClass
    {
        protected BaseClass(bool _) { }
        public BaseClass()
        {
            Table.table.Add("BaseClass" + Table.table.Count.ToString());
        }

        public BaseClass(string name)
        {
            Table.table.Add("BaseClass" + name);
        }
    }

    public class DClass1 : BaseClass
    {
        protected DClass1(bool _):base(false) { }
        public DClass1()
            : base(false)
        {
            Table.table.Add("DClass1" + Table.table.Count.ToString());
        }

        public DClass1(string name)
            : base(false)
        {
            Table.table.Add("DClass1" + name);
        }
    }

    public class DClass2 : DClass1
    {
        public DClass2()
            : base(false)
        {
            Table.table.Add("DClass2" + Table.table.Count.ToString());
        }
       
        public DClass2(string name)
            : base(false)
        {
            Table.table.Add("DClass2" + name);
        }
    }

    class Program
    {
        static void Main(string[] arg)
        {
            new BaseClass();
            new BaseClass("_Name");
            new DClass1();
            new DClass1("_Name");
            new DClass2();
            new DClass2("_Name");

            foreach (string s in Table.table)
            {
                Console.WriteLine(s);
            }

            Console.ReadLine();
        }
    }


Авось кому пригодится

Сообщение было успешно отредактировано singapur22 (09-04-2010 00:53 GMT3 часа, назад)

Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
erlik
[10] Житель
Онлайн статус=0  Профиль    




Посты: 2338
Откуда: Набережные Челны
Занятие: В чем сила, брат? В AutoIT3 и WinAPI.
Возраст: 47

18-03-2015
09-04-2010 01:27 GMT3 часа #1221359   Split
singapur22
пригодится. я этот base пока вообще не применял - хотя и читал что он для вызова любого конструктора из базового класса применяется.

Вот тоже накатал функцию которая может объединить любое кол-во массивов исключая повторяющиеся в них элементы. (LINQ рулит )

Код:
string[] names1 = { "Алексей", "Петр","Сергей", "Василий", "Мария", "Ольга" };
        string[] names2 = { "Иван", "Петр", "Алексей","Алсу", "Наталья", "Андрей", "Яков" };
        string[] names3 = { "Андрей","Альбина", "Иван", "Олег", "Роберт", "Наталья", "Екатерина" };
        string[] names4 = { "Андрей", "Иван", "Роберт", "Наталья", "Екатерина", "Гузель" };

// создаем что то типа массива массивов
        List<string[]> namesList = new List<string[]> { names1, names2, names3, names4 };

       var allNames =
           namesList.Aggregate(Enumerable.Empty<string>(),
           (current, next) => current.Union(next)).OrderBy(s => s).ToArray();  // пишем в один массив и заодно сортируем по возрастанию, то бишь в нашем случае по алфавиту.

//смотрим результат  - как говорится в одной  игре  "повторов  не было!" :-)
    foreach (var name in allNames)
        {
            Console.WriteLine(name);
        }
        Console.ReadKey();
    }


Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Cos
[20] Сталкер
Онлайн статус=0  Профиль    




Посты: 2692
Откуда:
Занятие:
Возраст:

09-04-2010 01:49 GMT3 часа #1221371   Split
singapur22
Цитата
А как это делается? Так же различия по аргументам, или можно создать конструкторы с разными именами и указывать конструктор с нужным именем?


Цитата

Код:
    public DocherClass() : base()
    {}
    public DocherClass(string name) : base(name)
    {}



Похоже. Те же яйца, только в профиль, вместо ключ. слова base просто указывается имя базового класса.

Цитата
Получился такой демонстрационный код, поддерживающий наследование и занос в таблицу данных об объекте при конструировании

Инкапсуляция с простым наследованием раскрыты. Остался полиморфизм .


singapur22
[10] Житель
Онлайн статус=0  Профиль    




Посты: 2089
Откуда: Рубцовск
Занятие: Проект "Мобила модмейкера"
Возраст: 44

13-08-2011
09-04-2010 12:15 GMT3 часа #1221446   Split
Cos Если ты имеешь ввиду это:
Цитата
Полиморфизм реализуется с помощью наследования классов и виртуальных функций.
То данные решения уже достигнуты. Имеется соответствующая пара ключевых слов virtual и override. Простой пример переопределения метода будет выглядеть так:

Код:
class BaseClass
{
    ...
    public virtual void Metod()
    {
        ...
    }
}

class DocherClass : BaseClass
{
    ...
    public override void Metod()
    {
        ...
        base.Metod();
    }
}


Где вызов базового виртуального метода base.Metod(); не обязателен. Хотя если переопределение используется для разделённых потоков, например Update() и Drow(), то без вызова базовых методов, пожалуй не обойтись. Это если метод не возвращает значение. А вот так будет выглядеть код с виртуальным методом возвращающим значение определённого типа:

Код:
class BaseClass
{
    ...
    public virtual double Metod()
    {
        ...
        return ...;
    }
}

class DocherClass : BaseClass
{
    ...
    public override double Metod()
    {
        ...
        return ...;
    }
}



erlik Прикольно. Проконспектирем.


Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
erlik
[10] Житель
Онлайн статус=0  Профиль    




Посты: 2338
Откуда: Набережные Челны
Занятие: В чем сила, брат? В AutoIT3 и WinAPI.
Возраст: 47

18-03-2015
10-04-2010 02:34 GMT3 часа #1221602   Split
singapur22
проверь у себя вот этот код

Код:
string s4 = System.IO.File.ReadAllText(@"D:\test\text.txt");
      // получаем кол-во предложений в файле
     var cn = s4.ToCharArray().Where(c => c == '.' | c == '!' | c == '?').Count();
    Console.WriteLine(cn);


у меня с форматом doc и rtf выдает неправильные значения. С txt и ltx все верно.
скорей всего word глючит - но надо удостовериться.

добавлено спустя 8 часа 56 минут

Вот накатал несколько примеров работы с linq запросами.
Может заинтересует - тоже начнешь LINQ изучать хорошая вещь - полезная. А для группировки и сортировки данных из таблиц\массивов баз - вообще незаменимая.

Код:
//находим элементы двух множеств которые не совпадают
        double[] numbers1 = { 2.0, 2.1, 2.2, 2.3, 2.4, 2.5 };
        double[] numbers2 = { 2.2 };

        IEnumerable<double> onlyInFirstSet = numbers1.Except(numbers2);
        foreach (double number in onlyInFirstSet)
        {
            Console.WriteLine(number);
        }

        //находим пересечения(повторяющиеся элементы) двух множеств
        int[] id1 = { 44, 26, 92, 30, 71, 38 };
        int[] id2 = { 39, 59, 83, 47, 26, 4, 30 };

        IEnumerable<int> both = id1.Intersect(id2);

        foreach (int id in both)
        {
            Console.WriteLine(id);
        }

        //получаем число элементов в последовательности
        string[] fruits = { "apple", "banana", "mango",
                      "orange", "passionfruit", "grape" };

        long count = fruits.LongCount();
        Console.WriteLine("В коллекции  {0} фруктов.", count);


     
        int[] grades = { 59, 82, 70, 56, 92, 98, 85 };
        //отсортируем значения  в порядке убывания, пропустим три первых и выберем остальные
        IEnumerable<int> skip = grades.OrderByDescending(g => g).Skip(3);
        //отсортируем значения  в порядке убывания и выберем три первых
        IEnumerable<int> take =grades.OrderByDescending(g => g).Take(3);

foreach (int grade in take)
        {
            Console.WriteLine(grade);
        }


        //объединим два множества отбросив повторяющиеся значения
        int[] ints1 = { 1, 2, 3, 4, 5, 6, 7, 8 };
        int[] ints2 = { 5, 6, 7, 8, 9, 10, 11, 12 };

        IEnumerable<int> union = ints1.Union(ints2);

        //объединяет  два множества  целиком
        IEnumerable<int> concat = ints1.Concat(ints2);

        foreach (int num in union)
        {
            Console.Write("{0} ", num);
        }

        //реверс элементов  последовательности
        char[] apple = { 'a', 'p', 'p', 'l', 'e' };

        char[] reversed = apple.Reverse().ToArray();

        foreach (char chr in reversed)
        {
            Console.Write(chr + " ");
        }


int[] m = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

// возвращает только элементы удовлетворяющие условию -
        IEnumerable<int> mass2 = m.TakeWhile(z => z < 8);
        foreach (var x in mass2)
        {
            Console.WriteLine(x);//  возврат 1, 2, 3, 4, 5, 6, 7
        }

        int[] m2 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// пропускает все элементы удовлетворяющие условие и возвращает остальные
        IEnumerable<int> mass = m2.SkipWhile(z => z < 8);
        foreach (var x in mass)
        {
            Console.WriteLine(x);//возрват 8,9,10
        }

// генерирует  последовательность чисел  в указанном диапазоне
        var sq = Enumerable.Range(1, 100);


int[] nums2 = { 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048 };

// возвращает первый элемент последовательности
        int num1 = nums.First<int>();
        int num2 = nums.First<int>(x => x > 50);  // с условием
        int num3 = nums.FirstOrDefault<int>(x => x > 5000); // с возвратом значения по умолчанию если  нужный элемент не найден.

// вычисляем среднее значение последовательности чисел
        double среднее = nums.Average();

        //  вычисляем сумму последовательности значений типа Int32. Тип последовательности - любой числовой
        List<int> numbers = new List<int> { 1, 6, 583, 100 };
        float sum = numbers.Sum();


        // проверка всех элементов последовательности - например на четность
        bool n = nums.All(c => c % 2 == 0);
     

        // проверяет две последовательности на равенство
        bool equal = nums.SequenceEqual(nums2);


        string[] city = { "New York", "Londona", "Paris",
                      "Roma", "Moscow", "Barselona" };

        // проверка на наличие элемента
        bool res = city.Any(c => c.Equals("London"));
        bool res2 = city.Contains("London");
        Console.WriteLine(res2.ToString());

        ArrayList fruits2 = new ArrayList(4);
        fruits2.Add("Mango");
        fruits2.Add("Orange");
        fruits2.Add("Apple");
        fruits2.Add(3.0);
        fruits2.Add("Banana");

        // фильтруем коллекцию задав нужный тип для отсева
        var query1 = fruits2.OfType<string>();

        foreach (var x in query1)
        {
            Console.WriteLine("Значение {0}  Тип {1}", x, x.GetType());
        }




А это немного посложнее - примеры целенаправленной сортировки и группировки.


Код:
public class ListAuto
    {
        public string label;
        public string country;
        public int cost;
        public string color;
       
    }

    public List<ListAuto> GetAuto()
    {
        List<ListAuto> autolist = new List<ListAuto>
       
        {
    new ListAuto {label= "FIAT", country="Италия", cost=14000, color="Синий"},
    new ListAuto {label= "ROLLS ROYS", country="Великобритания", cost = 200000, color="Синий"},
    new ListAuto {label= "AUDI", country="Германия", cost = 18000, color="Красный"},
    new ListAuto {label= "SKODA",country="Чехия", cost = 15000, color="Черный"},
    new ListAuto {label= "TOYOTA", country="Япония", cost =20000, color="Синий"},
    new ListAuto {label= "BENTLY", country="Великобритания", cost = 150000,color="Синий" },
    new ListAuto {label= "MAZDA", country="Япония", cost =21000, color="Желтый"},
    new ListAuto {label= "KIA", country="Корея", cost=22000 , color="Желтый"},
    new ListAuto {label= "FORD", country="США", cost =19000, color="Белый"},
    new ListAuto {label= "Volga", country="Россия", cost= 18000,color="Металлик" },
    new ListAuto {label= "DAEWOO", country="Корея", cost= 16000, color="Черный"},
    new ListAuto {label= "MITSUBISHI", country="Япония", cost =22000},
    new ListAuto {label= "CRYSLER", country="США", cost =260000,color="Красный" },
    new ListAuto {label= "Volkswagen", country="Германия", cost= 16000, color="Белый"},
    new ListAuto {label= "LADA", country="Россия", cost= 15000, color="Синий"},
    new ListAuto {label= "Mercedes Benz", country="Германия", cost= 30000,color="Черный" }
   };
        return autolist;
    }


    public void Auto()
    {
        List<ListAuto> autolist = GetAuto();

// формируем запрос к базе- хочу тачку не дороже 25 штук, не из России и не желтого цвета
        var myauto = from auto in autolist
                     where (auto.country != "Россия" & auto.cost <= 25000 & auto.color!="Желтый")
                     orderby auto.cost  // сортируем по цене для удобства
                     select auto.label;// выбираем то что нужно

        // или так
        var myauto2 = autolist.Where(
            x => x.country != "Россия" & x.cost <= 25000 & x.color!="Желтый").OrderBy(d => d.cost).Select(s => s.label);
       
        // получаем выборку
        foreach (var auto in myauto2)
        {
            Console.WriteLine(auto);
        }


   // сгруппируем тачки в группы по странам и заодно сделаем сортировку по цене внутри каждой группы
        var groupauto = autolist.OrderBy(t =>  t.cost).GroupBy(g => g.country);
       
        // или так - что равнозначно
        var groupauto2 =
            from тачка in autolist
            orderby тачка.cost
            group тачка by тачка.country;

       
            // получаем сформированный группы через двойной цикл
           foreach (var группа in groupauto2)
        {
            Console.WriteLine("Страна: {0}",группа.Key);
            foreach (var тачка  in группа)
            {
            Console.WriteLine("Тачка: {0} Цена {1}", тачка.label, тачка.cost);
            }
        }


           // усложняем задачу - выберем самую дешевую тачку в каждой стране 
           var groupauto3 =
           from тачка in autolist 
           orderby тачка.cost  //сначала сортируем по цене в порядке возрастания
           group тачка by тачка.country into группатачек //группируем по странам - результат сохраняем в into
           select группатачек.First(); //и наконец берем только первую тачку в каждой  последовательности - она и будет самой дешевой
         

           foreach (var тачка in groupauto3)
           {
               Console.WriteLine("Страна: {0} Марка: {1}  Цена  {2}",тачка.country, тачка.label, тачка.cost);

           }
           
    Console.ReadKey();

    }


Сообщение было успешно отредактировано erlik (10-04-2010 02:34 GMT3 часа, назад)

Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Psychologist
[3] Новобранец
Онлайн статус=0  Профиль    




Посты: 1808
Откуда: Челябинск
Занятие: Стихоплётство, туризм :)
Возраст: 27

12-12-2010
10-04-2010 20:26 GMT3 часа #1222661   Split
У меня вопрос.
Можно ли сделать так, чтобы при запуске программы появлялась консоль (сделано) и после закрытия её (любая клавиша) появлялась другая программа.
Т.е. мы сделали допустим окно, жмём F5, появляется консоль с приветствием. Жмём любйю кнопку для выхода. Появляется "окно".
Как это можно организовать?


И все мы ждем чего-то. Работа - дом - работа ©
erlik
[10] Житель
Онлайн статус=0  Профиль    




Посты: 2338
Откуда: Набережные Челны
Занятие: В чем сила, брат? В AutoIT3 и WinAPI.
Возраст: 47

18-03-2015
10-04-2010 21:22 GMT3 часа #1222688   Split
Сталкер Монолита
а зачем тебе это?
вообще то окна (то есть программы с созданным тобой интерфейсом) появляются если используешь не консольный проект, а проект WPF.
Хотя запуск любой сторонней (не твоей) программы можно сделать через код в любом проекте - есть специальные методы запуска и остановки программных потоков.
но что ты именно хочешь мне не совсем понятно.
из консоли то считать введенную клавишу (или слово )можно - и потом поймав ее вызвать команду для запуска программы

вот пример:
когда консоль открылась - выполняя какую то твою задачу - то после выполнения вводим слово run и жмем Enter - происходит запуск прораммы Norepad++

вот этот код должен быть у тебя в функции - слово для запуска пишешь любое.

if (Console.ReadLine() == "run")
{
Process p = new Process();
p.StartInfo.FileName = "notepad++.exe"; // имя программы - то что хочешь запустить
p.Start();
}

вверху файла нужно указать директиву
using System.Threading; (и подключить эту сборку если она не подключена через меню проект-> добавить ссылку)


Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Psychologist
[3] Новобранец
Онлайн статус=0  Профиль    




Посты: 1808
Откуда: Челябинск
Занятие: Стихоплётство, туризм :)
Возраст: 27

12-12-2010
10-04-2010 21:31 GMT3 часа #1222694   Split
erlik
Спасибо. Я просто хотел сделать что-то типа приветствия.

Тогда второй вопрос:
Как собственный проект скомпилить в -exe файл?


И все мы ждем чего-то. Работа - дом - работа ©
erlik
[10] Житель
Онлайн статус=0  Профиль    




Посты: 2338
Откуда: Набережные Челны
Занятие: В чем сила, брат? В AutoIT3 и WinAPI.
Возраст: 47

18-03-2015
10-04-2010 21:40 GMT3 часа #1222696   Split
Сталкер Монолита
прочитай всю ветку темы - там singapur22 все подробно расписывал - конкретно на 4-ой странице.


Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Psychologist
[3] Новобранец
Онлайн статус=0  Профиль    




Посты: 1808
Откуда: Челябинск
Занятие: Стихоплётство, туризм :)
Возраст: 27

12-12-2010
10-04-2010 21:53 GMT3 часа #1222703   Split
erlik
Попробывал твой пример, ругается на отсутствие имени Process.
Не знаешь в чём дело?


И все мы ждем чего-то. Работа - дом - работа ©
Cos
[20] Сталкер
Онлайн статус=0  Профиль    




Посты: 2692
Откуда:
Занятие:
Возраст:

10-04-2010 22:01 GMT3 часа #1222713   Split
Сталкер Монолита
В таких случая выкладывается исходник компилируемого файла (благо он небольшой).
Скорее всего забыто:

erlik
Цитата
вверху файла нужно указать директиву
using System.Threading; (и подключить эту сборку если она не подключена через меню проект-> добавить ссылку)


Либо System.Diagnostics если верить msdn:
http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx


Psychologist
[3] Новобранец
Онлайн статус=0  Профиль    




Посты: 1808
Откуда: Челябинск
Занятие: Стихоплётство, туризм :)
Возраст: 27

12-12-2010
10-04-2010 22:19 GMT3 часа #1222736   Split
Cos
То что ты привёл в цитате, указано.
Я и не хотел скомпилить проект (пока), просто он Процесс подчёркивает и говорит:
Цитата
Нет имени типа или ...


Действительно, после добовления System.Diagnostics заработало.
Спасибо!

добавлено спустя 9 минут

Вопрос:
Что означает последнее число в свойстве Margin?

И ещё:
Как задать тексту цвет и размер? Какое свойство за это отвечает?


И все мы ждем чего-то. Работа - дом - работа ©
erlik
[10] Житель
Онлайн статус=0  Профиль    




Посты: 2338
Откуда: Набережные Челны
Занятие: В чем сила, брат? В AutoIT3 и WinAPI.
Возраст: 47

18-03-2015
10-04-2010 22:31 GMT3 часа #1222743   Split
Cos
ты прав - ошибся блин - у меня в этом файле с тестовыми функциями целая куча директив.
Сталкер Монолита
там все эти цифры - отступы от верха,низа, справа, слева - ты сам разные значения повводи - быстрее сам разберешься
я уж точно не помню - тем более использую не Margin, а Canvas.Top="значение" Canvas.Left="значение" и т.д. то есть отступы от компонента Canvas -это такая ограничивающая рамка.

добавлено спустя 2 минут

цвет
Foreground ="выбираешь цвет в- в панельке - она сама откроется"
FontFamily="Century Gothic" -- шрифт
FontSize="12" размер шрифта

Сообщение было успешно отредактировано erlik (10-04-2010 22:31 GMT3 часа, назад)

Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Psychologist
[3] Новобранец
Онлайн статус=0  Профиль    




Посты: 1808
Откуда: Челябинск
Занятие: Стихоплётство, туризм :)
Возраст: 27

12-12-2010
10-04-2010 22:44 GMT3 часа #1222750   Split
erlik
Насчёт маргина, я уже понял что отступы, только с последним, пробывал и 1 и 100 разницы не было, значит сизу.

И спасибо что сообщил про цвет текста, пригодится.

Сообщение было успешно отредактировано Сталкер Монолита (10-04-2010 22:44 GMT3 часа, назад)

И все мы ждем чего-то. Работа - дом - работа ©
erlik
[10] Житель
Онлайн статус=0  Профиль    




Посты: 2338
Откуда: Набережные Челны
Занятие: В чем сила, брат? В AutoIT3 и WinAPI.
Возраст: 47

18-03-2015
10-04-2010 22:56 GMT3 часа #1222763   Split
Сталкер Монолита
в общем я посмотрел у себя - в принципе две вторые цифры в margin особенно не нужны
первая дает отступ слева , вторая от верха - у меня почти везде третья и четвертая цифры по нолям выставлены
<Button Margin="280,650,0,0"
Но можно вообще их не писать.
или даже в некоторых случаях только одну использовать .

вот пример компонента label

<Label FontFamily="Trebuchet MS" //шрифт
Margin="100,320,0,0"
FontWeight="Bold" // ширина шрифта - жирный
FontSize="12"// размер шрифта - кегль
Background ="Blue" // цвет фона
Foreground="Silver" // цвет текста в метке
Height="26" Width="150"> // размеры метки
Врубай громче // текст
</Label>


Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Psychologist
[3] Новобранец
Онлайн статус=0  Профиль    




Посты: 1808
Откуда: Челябинск
Занятие: Стихоплётство, туризм :)
Возраст: 27

12-12-2010
11-04-2010 11:36 GMT3 часа #1223053   Split
У меня вопрос, касательно установки.

Сейчас я у дяди, у него Виста стоит, поэтому установилась нормально.
Но когда я дома на ХР ставлю, вылетает, когда начинает устанавливаться "Установщик Windows 3.1 (3.6)". Всё из инета скачалось, началась установка и сразу ошибка.
Не знаете в чём дело?

добавлено спустя 12 минут

erlik
Попробывал в конструкторе поводить объект, оказалось, что отступ снизу или сверху указывается лишь тогда, когда до низа или верха расстоояние меньше середины. Т.е. если объект в самом низу то отступ до верха не указывется.

Сообщение было успешно отредактировано Сталкер Монолита (11-04-2010 11:36 GMT3 часа, назад)

И все мы ждем чего-то. Работа - дом - работа ©
erlik
[10] Житель
Онлайн статус=0  Профиль    




Посты: 2338
Откуда: Набережные Челны
Занятие: В чем сила, брат? В AutoIT3 и WinAPI.
Возраст: 47

18-03-2015
11-04-2010 14:34 GMT3 часа #1223176   Split
Сталкер Монолита
У меня как раз XP - и установилась программа с первого раза и без глюков. (Я правда качал полный пак сред разработки - сразу и для С++, и VB и C# и т.д. - весил пак 800 метров.)
Поэтому сложно сказать почему у тебя так. Там хоть что в ошибке то пишется?


Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"


Форумы > Специализированные > Hard & Soft > Программирование на C# (C Sharp)

Страница 6 из 9Первая«3456789 »Последняя





???????@Mail.ru Rambler's Top100
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для
просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.

Использование материалов сайта возможно с разрешения администрации. Все права защищены. © 2004–2024 «Stalker-Portal.ru»