У меня в главном классе создан метод virtual, в классах наследниках, он переопределяется. Так вот, мне нужно из классов наследников взять значение переменных, которые находятся в методе override. Я создаю объекты классов наследников, но мне нужно ввести аргументы и тут я не знаю что делать. Вот весь код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
using help3;
namespace help3
{
public class Katalog
{
public string Type { get; set; }
public string Model { get; set; }
public string Firm { get; set; }
public string Diagonal { get; set; }
public int Tv_tuner { get; set; }
public string Resolution { get; set; }
public string Type_matrix { get; set; }
public string Type_sensor { get; set; } //Sensor
public string Amount_hdd { get; set; } //Sensor
public virtual int Price()
{
int value = 0;
return value;
}
}
public class LCD : Katalog
{
public int value { get; set; }
public LCD(string Type, string Model, string Firm, string Diagonal, int Tv_Tuner, string Resolution, string Type_matrix, int value)
{
this.Type = Type;
this.Model = Model;
this.Firm = Firm;
this.Diagonal = Diagonal;
this.Tv_tuner = Tv_tuner;
this.Resolution = Resolution;
this.Type_matrix = Type_matrix;
this.value = value;
}
public LCD(string l)
{
string[] split = l.Split(new Char[] { '*' });
Model = split[0].Trim();
Firm = split[1].Trim();
Diagonal = split[2].Trim();
Tv_tuner = int.Parse(split[3].Trim());
Resolution = split[4].Trim();
Type_matrix = split[5].Trim();
value = int.Parse(split[6].Trim());
}
public override string ToString()
{
return String.Format("Модель {0}\nФирма {1}\nДиагональ {2}\nРазрешение {3}\nТип матрицы {4}\nСтоимость {5} гривны\n", Model, Firm, Diagonal, Resolution, Type_matrix, value);
}
public override int Price()
{
value = (value + Tv_tuner) - (value * 5 / 100);
return value;
}
}
public class Sensor : Katalog
{
public Sensor(string Type, string Model, string Firm, string Diagonal, int Tv_Tuner, string Resolution, string Type_sensor, string Amount_hdd)
{
this.Type = Type;
this.Model = Model;
this.Firm = Firm;
this.Diagonal = Diagonal;
this.Resolution = Resolution;
this.Type_sensor = Type_sensor;
this.Amount_hdd = Amount_hdd;
}
public int value { get; set; }
public Sensor(string l)
{
string[] split = l.Split(new Char[] { '*' });
Model = split[0].Trim();
Firm = split[1].Trim();
Diagonal = split[2].Trim();
Resolution = split[3].Trim();
Type_sensor = split[4].Trim();
Amount_hdd = split[5].Trim();
value = int.Parse(split[6].Trim());
}
public override string ToString()
{
return String.Format("Модель {0}\nФирма {1}\nДиагональ {2}\nРазрешение {3}\nOбъем HDD {4}\nТип сенсора {5}\nСтоимость {6} гривны\n", Model, Firm, Diagonal, Resolution, Amount_hdd, Type_sensor, value);
}
public override int Price()
{
value = ((value * 3 / 100) * 12 + value) / 12;
return value;
}
}
class Program
{
static void Main(string[] args)
{
void CreateList()
{
StreamReader file = new StreamReader("Katalog.txt");
List<LCD> Katalog_LCD = new List<LCD>();
List<Sensor> Katalog_Sensor = new List<Sensor>();
string line;
while ((line = file.ReadLine()) != null)
{
if (line.EndsWith("*"))
{ Katalog_LCD.Add(new LCD(line)); }
else
{ Katalog_Sensor.Add(new Sensor(line)); }
}
foreach (LCD a in Katalog_LCD)
{
Console.WriteLine(a);
}
foreach (Sensor b in Katalog_Sensor)
{
Console.WriteLine(b);
}
}
CreateList();
//Программа
LCD L = new LCD();
Sensor S = new Sensor();
Console.WriteLine("Какой монитор вы желаете приобрести 1.LCD или 2.Сенсорный?");
string buy;
while (true)//Цикл для правильного ввода названия мониторов
{
buy = Console.ReadLine();
if (buy == "1" || buy == "2") break;
else Console.WriteLine("Пожалуйста введите правильное название");
}
switch (buy)
{
case "1":
Console.WriteLine("Желаете приопрести ТВ-тюнер всего за 299 гривен и получить скидку 5% на всю сумму покупки?");
string tv_tuner = Console.ReadLine();
if (tv_tuner == "+")
{
L.Price();
Console.WriteLine("Вы купили LCD монитор и ТВ-тюнер.\nСумма к оплате сo скидкой 5% {0} гривен.", L.value);
}
else if (tv_tuner == "-")
{
Console.WriteLine("Вы купили LCD монитор.\nСумма к оплате {0} гривен.", L.value);
}
break;
case "2":
Console.WriteLine("Желаете взять кредит на 12 месяцев?");
string kredit = Console.ReadLine();
if (kredit == "+")
{
Console.WriteLine("Вы взяли кредит, суммой {0} гривен, на 12 месяцев, под 3%.", S.value);
S.Price();
Console.WriteLine("Ежемесячная сумма погашения кредита, составляет {0} гривен.", S.value);
}
else if (kredit == "-")
{
Console.WriteLine("Вы купили сенсорный монитор. Сумма к оплате {0} гривен.", S.value);
}
break;
}
Console.ReadLine();
}
}
}
Итак, у вас есть класс родитель
public class Katalog
{
public string Type { get; set; }
public string Model { get; set; }
public string Firm { get; set; }
public string Diagonal { get; set; }
public int Tv_tuner { get; set; }
public string Resolution { get; set; }
public string Type_matrix { get; set; }
public string Type_sensor { get; set; } //Sensor
public string Amount_hdd { get; set; } //Sensor
public virtual int Price()
{
int value = 0;
return value;
}
}
И класс наследник(упростил, чтобы не загромождать)
public class LCD : Katalog
{
public int Value { get; set; }
public LCD()
{
Type = "*НЕ ЗАДАНО*";
Model = "*НЕ ЗАДАНО*";
Firm = "*НЕ ЗАДАНО*";
Diagonal = "*НЕ ЗАДАНО*";
Tv_tuner = 0;
Resolution = "*НЕ ЗАДАНО*";
Type_matrix = "*НЕ ЗАДАНО*";
Value = 0;
}
public LCD(string Type, string Model, string Firm, string Diagonal, int Tv_Tuner, string Resolution, string Type_matrix, int value)
{
this.Type = Type;
this.Model = Model;
this.Firm = Firm;
this.Diagonal = Diagonal;
this.Tv_tuner = Tv_Tuner;
this.Resolution = Resolution;
this.Type_matrix = Type_matrix;
this.Value = value;
}
public override int Price()
{
Value = (Value + Tv_tuner) - (Value * 5 / 100);
return Value;
}
}
В классе наследнике есть конструктор, не принимающий значения:
public LCD()
{
Type = "*НЕ ЗАДАНО*";
Model = "*НЕ ЗАДАНО*";
Firm = "*НЕ ЗАДАНО*";
Diagonal = "*НЕ ЗАДАНО*";
Tv_tuner = 0;
Resolution = "*НЕ ЗАДАНО*";
Type_matrix = "*НЕ ЗАДАНО*";
Value = 0;
}
И конструктор, принимающий значения(идёт следом). Далее, создаём экземпляры класса:
static void Main(string[] args)
{
LCD lcd1 = new LCD();
LCD lcd2 = new LCD("qwe","dwdwd","zxcc","dwdwdwdwddddd", 50,"ddgrgrh","dwdbkuk",300);
Console.WriteLine(lcd1.Price());
Console.WriteLine(lcd2.Price());
Console.ReadKey();
}
Экземпляр lcd1
использует конструктор без параметров, в то время как lcd2
конструктор с параметрами.
Если отвечать в контексте вашего вопроса, то вам нужно создавать свои объекты:
LCD L = new LCD();
Sensor S = new Sensor();
В соответствии с их конструкторами. Либо создать для них конструктора без параметров. С установкой в конструкторах каких-то значений по умолчанию.
Мне так-же не понятен смысл функции createList
. Вы получаете два списка устройств из файла, но нигде не используете его. Если вы хотите использовать эти списки ниже в коде, то надо организовывать цикл, а лучше итератор. И вообще, свести устройства в один список List<Catalog> Katalog = new List<Catalog>();
, используя полиморфизм, а затем определяя тип устройства через is
.
К слову, если использовать один объект, а не два, у Вас получится уйти от switch
, предварительно инкапсулируя сообщения на консоль в методы класса.
С другой стороны, ваша архитектура ужасна. Используемое вами наследование порочно в данном случае. Я бы использовал скорее паттерн фасад, если конечно мне удалось понять что вы хотели получить. Этот паттерн доступно описан в паттернах проектирования Эрика фримена.
Также можно попробовать вынести отличия двух классов в один общий и агрегировать абстракцию. Это тоже сможет очень помочь.
Использовать переменную можно так:
Взять тело метода createList
и вставил его в метод Main, а сам метод createList
удалить. В методе Main уже использовать переменные и методы класса. Katalog_LCD[индекс].Price()
- запуск метода.
Katalog_LCD[индекс].value
- использование переменной.
Ну и вот полностью код, может кому поможет:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
using help3;
namespace help3
{
public class Katalog
{
public string Type { get; set; }
public string Model { get; set; }
public string Firm { get; set; }
public string Diagonal { get; set; }
public int Tv_tuner { get; set; }
public string Resolution { get; set; }
public string Type_matrix { get; set; }
public string Type_sensor { get; set; } //Sensor
public string Amount_hdd { get; set; } //Sensor
public virtual int Price()
{
int value = 0;
return value;
}
}
public class LCD : Katalog
{
public int value { get; set; }
public LCD(string Type, string Model, string Firm, string Diagonal, int Tv_Tuner, string Resolution, string Type_matrix, int value)
{
this.Type = Type;
this.Model = Model;
this.Firm = Firm;
this.Diagonal = Diagonal;
this.Tv_tuner = Tv_tuner;
this.Resolution = Resolution;
this.Type_matrix = Type_matrix;
this.value = value;
}
public LCD(string l)
{
string[] split = l.Split(new Char[] { '*' });
Model = split[0].Trim();
Firm = split[1].Trim();
Diagonal = split[2].Trim();
Tv_tuner = int.Parse(split[3].Trim());
Resolution = split[4].Trim();
Type_matrix = split[5].Trim();
value = int.Parse(split[6].Trim());
}
public LCD()
{
}
public override string ToString()
{
return String.Format("Модель {0}\nФирма {1}\nДиагональ {2}\nРазрешение {3}\nТип матрицы {4}\nСтоимость {5} гривны\n", Model, Firm, Diagonal, Resolution, Type_matrix, value);
}
public override int Price()
{
value = (value + Tv_tuner) - (value * 5 / 100);
return value;
}
}
public class Sensor : Katalog
{
public int value { get; set; }
public Sensor(string l)
{
string[] split = l.Split(new Char[] { '*' });
Model = split[0].Trim();
Firm = split[1].Trim();
Diagonal = split[2].Trim();
Resolution = split[3].Trim();
Type_sensor = split[4].Trim();
Amount_hdd = split[5].Trim();
value = int.Parse(split[6].Trim());
}
public Sensor()
{
}
public override string ToString()
{
return String.Format("Модель {0}\nФирма {1}\nДиагональ {2}\nРазрешение {3}\nOбъем HDD {4}\nТип сенсора {5}\nСтоимость {6} гривны\n", Model, Firm, Diagonal, Resolution, Amount_hdd, Type_sensor, value);
}
public override int Price()
{
value = ((value * 3 / 100) * 12 + value) / 12;
return value;
}
public Sensor(string Type, string Model, string Firm, string Diagonal, int Tv_Tuner, string Resolution, string Type_sensor, string Amount_hdd, int value)
{
this.Type = Type;
this.Model = Model;
this.Firm = Firm;
this.Diagonal = Diagonal;
this.Resolution = Resolution;
this.Type_sensor = Type_sensor;
this.Amount_hdd = Amount_hdd;
this.value = value;
}
}
class Program
{
static void Main(string[] args)
{
StreamReader file = new StreamReader("Katalog.txt");
List<LCD> Katalog_LCD = new List<LCD>();
List<Sensor> Katalog_Sensor = new List<Sensor>();
string line;
while ((line = file.ReadLine()) != null)
{
if (line.EndsWith("*"))
{ Katalog_LCD.Add(new LCD(line)); }
else
{ Katalog_Sensor.Add(new Sensor(line)); }
}
foreach (LCD a in Katalog_LCD)
{
Console.WriteLine("---LCD монитор---\n{0}", a);//Вывод ЛСД
}
foreach (Sensor b in Katalog_Sensor)
{
Console.WriteLine("---Сенсорный монитор---\n{0}", b);//Вывод Сенсоров
}
m:
string Type;
while (true)//Цикл для правильного ввода названия мониторов
{
Console.WriteLine("Какой тип монитора Вы хотите купить, LCD или Sensor ");
Type = Console.ReadLine();
if (Type == "LCD" || Type == "Sensor") break;
else Console.WriteLine("Пожалуйста, введите правильный тип");
}
Console.WriteLine("Теперь модель монитора");
string Model = Console.ReadLine();
if (Type == "LCD")
{
var test = from i in Katalog_LCD
where i.Model == Model
select i;
foreach (LCD i in test)
{
Console.WriteLine("\nВы выбрали этот монитор: \n{0}", i);
Console.WriteLine("При покупке LCD монитора с tv-тюнером, стоимостью более 5000 гривен, предоставляется скидка 5%\nСтоимость tv-тюнерa {0} гривен\nЖелатете купить tv-тюнер?", i.Tv_tuner);
string tv_tuner = Console.ReadLine();
if (tv_tuner == "+")
{
if (i.value > 5000)
{
i.Price();
Console.WriteLine("Вы купили LCD монитор и ТВ-тюнер.\nСумма к оплате сo скидкой {0} гривен.", i.value);
}
else
{
Console.WriteLine("Сумма Вашей покупки не достаточна для данyой акции.");
}
}
else if (tv_tuner == "-" && tv_tuner == "+")
{
Console.WriteLine("Вы купили LCD монитор.\nСумма к оплате {0} гривен.", i.value);
}
}
}
else if (Type == "Sensor")
{
var test = from i in Katalog_Sensor
where i.Model == Model
select i;
foreach (Sensor i in test)
{
Console.WriteLine("Вы выбрали этот монитор: \n{0}", i);
Console.WriteLine("Желаете взять кредит на 12 месяцев?");
string kredit = Console.ReadLine();
if (kredit == "+")
{
Console.WriteLine("Вы взяли кредит, суммой {0} гривен, на 12 месяцев, под 3%.", i.value);
i.Price();
Console.WriteLine("Ежемесячная сумма погашения кредита, составляет {0} гривен.", i.value);
}
else if (kredit == "-")
{
Console.WriteLine("Вы купили сенсорный монитор. Сумма к оплате {0} гривен.", i.value);
}
}
}
Console.WriteLine("Приходите к нам ещё.");
string start = Console.ReadLine();
if (start != null)
goto m;
Console.ReadLine();
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Пытаюсь привязать цвет эллипса к полю созданного класса, но ничего не выходитЧто я делаю не так? Xaml:
Требуется из цифры 1 получить A, из 2 получить B, из 3 получить C и тд до ZКак это сделать?
Есть приложение в котором пользователь может указывать название продукта и его цену, по нажатию на кнопку эти данные вносятся в ObservableCollection...