Сталкер Монолита Это зависит от твоей соображалки. Для начала установи Visual C# Express Editor 2008. Ссылку найдёшь на первой странице. Почитай MSDN. Ссылку найдёшь там же. Попрактикуйся немного. А там уже сам решай, стоит его изучать, или нет. Если всётаки решишь продолжить его изучение, то конечно помогать будем по мере собственных знаний.
Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
erlik {get; set;} --это достаточно удобное контекстное выражение. Используется для задания свойств переменным. Например, **50016ea8aab1bb10eeba** {
return int1;
}
set
{
int1 = value *5;
}
}
}[/code]
Назначенные свойства таковы. При считывании значения переменной int2 будем всегда получать значение равное установленному значению помноженному на 5.
Тоесть, если назначить переменной int2 значение равное 3, то при последующем считывании его значения получим 15.
Подобные контекстные выражения удобно использовать для создания и дальнейшего использования скрытых математических формул, используемых в точечных местах кода.
Или ещё один способ применения. Можно использовать данное свойство, как математическое действие, с запретом возможности изменения значения через переменную свойсва:
[code]public int1 = 5;
public int2
{
get
{
return int1 * int1;
}
}[/code]
В данном примере мы не использовали свойство set; Это приводит к тому, что назначить значение переменной int2 не возможно. Фактически, переменную int2 мы здесь используем как формулу математического действия над переменной int1.
И наконец третий пример. Используем только свойство set;
[code]public int1;
public int2
{
set
{
int1 = value * value;
}
}[/code]
В данном примере переменная int2 используется как метод установки значения переменной int1. Считать соответственно значение с переменной int2 нельзя. Так как используется она как предварительное математическое действие над значением, перед установкой его переменной int1.
К сведенью. value -- это зарезервированное слово возвращающее значение переменной свойства, в теле которого оно используется.
отредактировал(а) singapur22: 08-04-2010 17:03 GMT3 час. Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
singapur22
Спасибо - теперь все стало понятно, а то раньше гадал - для чего эти выражения нужны - пояснений нигде не встречал.
Ещё какието (LINQ to ...) видел
нарыл вот такие интерфейсы использующие linq запросы:
LINQ to Object - работает с коллекциями IEnumerable или IEnumerable - методы в пространстве имен 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
Неуниверсальный вариант 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",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
erlik Это конечно всё хорошо, но у меня другая тема. Пытаюсь решить одну проблему. Пока без успешно. Кароче мне нужно, чтобы при инициализации дочернего класса, иници**50046ea8aab1bb10eeba**BaseClass()
{
//заносим объект в таблицу
}
}
class DocherClass : BaseClass
{
public DocherClass()
{
//заносим объект в таблицу
}
}[/code]
При создании объекта того, или иного класса, он (объект) регистрируется в определённой таблице.
Оба класса могут использоваться по отдельности. Тоесть могут создаваться объекты как BaseClass класса, так и DocherClass класса по отдельности.
Проблема заключается в том, что при создании объекта дочернего класса, в таблице производится регистрация двух объектов (объекта класса BaseClass и объекта класса DocherClass). Мне же нужно, чтобы при создании объекта DocherClass класса, базовый объект не регистрировался. Испробывал всё, но в связи с тем, что при создании объекта дочернего класса, сначала производится инициализация базового класса, а уже после, дочернего. Из-за чего нет возможности задавать условия регистрации из дочернего класса.
Но может можно както определить в базовом классе, что создаётся именно объект дочернего класса, а не базового?
Ффуууу! Наконецто решил свою проблему. Правда не так как хотелось бы, но и это тоже результат.
Фактически пришлось пожанглировать уровнями доступности. В итоге получили такое решение:
[code]class BaseClass
{
protected BaseClass() {}
public BaseClass(string name)
{
//заносим объект в таблицу
}
}
class DocherClass : BaseClass
{
public DocherClass(string name)
{
//заносим объект в таблицу
}
}[/code]
Как видно из кода, пришлось добавить обязательный аргумент, который разделяет два конструктора с модификаторами protected и public.
К сведенью: Модификатор protected ограничивает доступ к методу или в данном случае, к конструктору, содержащим классом или типами, которые являются производными от содержащего класса. Тоесть, при создании объекта класса DocherClass будет производиться инициализация класса BaseClass через конструктор protected BaseClass(), в то время если создавать объект класса BaseClass, его инициализация будет производиться только через конструктор public BaseClass(string name).
Вот если бы ещё был модификатор с уровнем доступности, только из внешних классов и сборок, то вообще бы всё было в ажуре. Можно было бы отказаться от обязательного аргумента.
отредактировал(а) singapur22: 08-04-2010 19:17 GMT3 час. Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
singapur22
Я конечно не знаю всех тонкостей в наследовании С++/C#, но как насчет создания нескольких конструкторов для дочернего класса? В конструкторе по-умолчанию (public DocherClass()) будет производится только инициализация, без регистрации, а в доп. конструкторе (с какими-нибудь левыми параметрами для его дифференциации от констр. по-умолчанию) будет и инициализ. и регистрация.
добавлено спустя 3 минут
Ффуууу! Наконецто решил свою проблему.
...Ну или вместо параметров дифференцировать конструкторы по их уровню доступности.
singapur22
так я и говорю - обратный по значению - но поковыряв книжку такого не нашел.
А я тоже свою проблемку (мелкую конечно) решил
оказывается в linq есть отличный метод который сортирует не только числа, но и строки
string[] students = { "Яковлев","Иванов", "Сидоров","Петров",
"Орлов", "Курочкин", "Шишкин" };
var list3 = students.OrderBy(z => z);
получаем список отсортированный по алфавиту - даже компаратор не нужен так как используется дефолтовый (хотя можно и свой указать).
отредактировал(а) erlik: 08-04-2010 20:15 GMT3 час. Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
отредактировал(а) singapur22: 08-04-2010 20:53 GMT3 час. Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
singapur22
То что и было сделано **50016ea8aab1bb10eeba**заносим объект в таблицу
}
}
[/code]
Т.е создавая второй конструктор с неким различием в параметрах от констр. по-умолчанию (в данньм случае с доп. параметром name) и позднее созданием объекта public DocherClass("lalala") компилятор при инициализ. конструктора базового класса будет искать "наиболее похожий" (мое предположение относительно C#, в C++ это делается ручками, т.е можно банально указать какой из конструкторов базового класса мы хотим вызвать) т.е. опять таки с одним параметром типа srting. И соотв. таким образом варьировать способы инициализ. конкретного класса.
в C++ это делается ручками, т.е можно банально указать какой из конструкторов базового класса мы хотим вызвать
А как э
отредактировал(а) singapur22: 08-04-2010 21:53 GMT3 час. Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Полиморфизм реализуется с помощью наследования классов и виртуальных функций.
То данные решения уже достигнуты. Имеется соответствующая пар**50016ea8aab1bb10eeba** ...
public virtual void Metod()
{
...
}
}
class DocherClass : BaseClass
{
...
public override void Metod()
{
...
base.Metod();
}
}[/code]
Где вызов базового виртуального метода base.Metod(); не обязателен. Хотя если переопределение используется для разделённых потоков, например Update() и Drow(), то без вызова базовых методов, пожалуй не обойтись. Это если метод не возвращает значение. А вот так будет выглядеть код с виртуальным методом возвращающим значение определённого типа:
singapur22
проверь у себя вот **50016ea8aab1bb10eeba** == '?').Count();
Console.WriteLine(cn);[/code]
у меня с форматом doc и rtf выдает неправильные значения. С txt и ltx все верно.
скорей всего word глючит - но надо удостовериться.
добавлено спустя 8 часа 56 минут
Вот накатал несколько примеров работы с linq запросами.
Может заинтересует - тоже начнешь LINQ изучать :-) хорошая вещь - полезная. А для группировки и сортировки данных из таблиц\массивов баз - вообще незаменимая.
[code]
//находим элементы двух множеств которые не совпадают
double[] numbers1 = { 2.0, 2.1, 2.2, 2.3, 2.4, 2.5 };
double[] numbers2 = { 2.2 };
IEnumerable onlyInFirstSet = numbers1.Except(numbers2);
foreach (double number in onlyInFirstSet)
{
Console.WriteLine(number);
}
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 skip = grades.OrderByDescending(g => g).Skip(3);
//отсортируем значения в порядке убывания и выберем три первых
IEnumerable take =grades.OrderByDescending(g => g).Take(3);
foreach (int grade in take)
{
Console.WriteLine(grade);
}
// возвращает первый элемент последовательности
int num1 = nums.First();
int num2 = nums.First(x => x > 50); // с условием
int num3 = nums.FirstOrDefault(x => x > 5000); // с возвратом значения по умолчанию если нужный элемент не найден.
// вычисляем среднее значение последовательности чисел
double среднее = nums.Average();
// вычисляем сумму последовательности значений типа Int32. Тип последовательности - любой числовой
List numbers = new List { 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();
foreach (var x in query1)
{
Console.WriteLine("Значение {0} Тип {1}", x, x.GetType());
}
[/code]
А это немного посложнее - примеры целенаправленной сортировки и группировки.
[code]
public class ListAuto
{
public string label;
public string country;
public int cost;
public string color;
}
public List GetAuto()
{
List autolist = new List
{
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 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(); //и наконец берем только первую тачку в каждой последовательности - она и будет самой дешевой
У меня вопрос.
Можно ли сделать так, чтобы при запуске программы появлялась консоль (сделано) и после закрытия её (любая клавиша) появлялась другая программа.
Т.е. мы сделали допустим окно, жмём F5, появляется консоль с приветствием. Жмём любйю кнопку для выхода. Появляется "окно".
Как это можно организовать?
Сталкер Монолита
а зачем тебе это?
вообще то окна (то есть программы с созданным тобой интерфейсом) появляются если используешь не консольный проект, а проект 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",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Cos
ты прав - ошибся блин - у меня в этом файле с тестовыми функциями целая куча директив.:-) Сталкер Монолита
там все эти цифры - отступы от верха,низа, справа, слева - ты сам разные значения повводи - быстрее сам разберешься :-)
я уж точно не помню - тем более использую не Margin, а Canvas.Top="значение" Canvas.Left="значение" и т.д. то есть отступы от компонента Canvas -это такая ограничивающая рамка.
добавлено спустя 2 минут
цвет
Foreground ="выбираешь цвет в- в панельке - она сама откроется"
FontFamily="Century Gothic" -- шрифт
FontSize="12" размер шрифта
отредактировал(а) erlik: 10-04-2010 19:31 GMT3 час. Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Сталкер Монолита
в общем я посмотрел у себя - в принципе две вторые цифры в margin особенно не нужны
первая дает отступ слева , вторая от верха - у меня почти везде третья и четвертая цифры по нолям выставлены
Но можно вообще их не писать.
или даже в некоторых случаях только одну использовать .
вот пример компонента label
Margin="100,320,0,0"
FontWeight="Bold" // ширина шрифта - жирный
FontSize="12"// размер шрифта - кегль
Background ="Blue" // цвет фона
Foreground="Silver" // цвет текста в метке
Height="26" Width="150"> // размеры метки
Врубай громче // текст
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Сейчас я у дяди, у него Виста стоит, поэтому установилась нормально.
Но когда я дома на ХР ставлю, вылетает, когда начинает устанавливаться "Установщик Windows 3.1 (3.6)". Всё из инета скачалось, началась установка и сразу ошибка.
Не знаете в чём дело?
добавлено спустя 12 минут
erlik
Попробывал в конструкторе поводить объект, оказалось, что отступ снизу или сверху указывается лишь тогда, когда до низа или верха расстоояние меньше середины. Т.е. если объект в самом низу то отступ до верха не указывется.
Сталкер Монолита
У меня как раз XP - и установилась программа с первого раза и без глюков. (Я правда качал полный пак сред разработки - сразу и для С++, и VB и C# и т.д. - весил пак 800 метров.)
Поэтому сложно сказать почему у тебя так. Там хоть что в ошибке то пишется?
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.