Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2017, 20:53   #1
Andry95
Пользователь
 
Регистрация: 01.03.2016
Сообщений: 24
По умолчанию Абстрактный класс

Можем ли мы здесь абстрактный метод преобразовать в конструктор или метод, т.е. вычисление гривны в других валютах должно реализовываться в отдельном методе или конструкторе
Код:
namespace Valuta
{
    class Program
    {
        abstract class BaseValuta //Абстрактный класс
        {
                    
           protected double _grn = Double.Parse(Console.ReadLine());

            
            protected double _rub = 0;
            protected double _dollar = 0;
            protected double _euro = 0;

            public abstract void AbstractMethod(); //создаем абстрактный метод
            public abstract double grn {
                get; }
            public abstract double rub { get; }
            public abstract double dollar { get; }
            public abstract double euro { get; }
        } 
        class DerivedClass : BaseValuta
        {
           
            public override void AbstractMethod()
            {
                _grn = _grn * 1;
                Console.WriteLine("Введите курс рубля:");
                double kursrub = Double.Parse(Console.ReadLine());
                _rub = _grn / kursrub;
                Console.WriteLine("Введите курс доллара:");
                double kursdoll = Double.Parse(Console.ReadLine());
                _dollar = _grn / kursdoll;
                Console.WriteLine("Введите курс евро:");
                double kurseuro = Double.Parse(Console.ReadLine());
                _euro = _grn / kurseuro;
            }
            public override double grn
            {
                get
                {
                    return _grn;
                }
            }
            public override double rub
            {
                get
                {
                    return _rub;
                }
            }
            public override double dollar
            {
                get
                {
                    return _dollar;                  
                }
            }
            public override double euro
            {
                get
                {
                    //throw new NotImplementedException();
                    return _euro;
                }
            }
static void Main(string[] args)
        {
                Console.WriteLine("Введите сумму в гривнах");
                DerivedClass o = new DerivedClass();
                o.AbstractMethod();
                Console.WriteLine(" Гривны = {0}, Рубли = {1:0.###}, Доллары = {2:0.###}, Евро = {3}", o.grn, o.rub, o.dollar, o.euro);
                //Console.WriteLine(" Доллары = {0:0.###}, Евро = {1}", o.dollar, o.euro);
                Console.ReadKey();
        }
        }
        
    }
}
Andry95 вне форума Ответить с цитированием
Старый 25.10.2017, 20:54   #2
Andry95
Пользователь
 
Регистрация: 01.03.2016
Сообщений: 24
По умолчанию

и какие ещё советы будут по рефакторингу кода?
Andry95 вне форума Ответить с цитированием
Старый 25.10.2017, 21:15   #3
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Форматировать код нормально. Ctrl+A, Ctrl+K, Ctrl+F
Использовать английские имена (валюта — currency, курс обмена — exchange rate).
Изолировать основную логику от работы с UI, ввода/вывода и т.п.

Ну и я вообще не особо понял в чем задача.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 26.10.2017, 00:46   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

1. Названия типа Valuta - дичь дикая
2.
Код:
protected double _grn = Double.Parse(Console.ReadLine());
что там вообще консоль забыла? Можете контролировать когда у пользователя неизвестно что запрашивать из консоли будете? Что будете делать, когда захотите на формах интерфейс написать?
3.
Код:
protected double _rub = 0;
            protected double _dollar = 0;
            protected double _euro = 0;
Захотите добавить биткоины. Как быть? Базовый класс переписывать, а потом и наследников?
По факту имеем:
1) Валюта - это достаточно тупая вещь, которая ничего, кроме себя, не знает. Допустим, рубль знает, что он называется рубль, символ валюты - буква Р с черточкой, краткое написание руб. может еще какие-нибудь коды и обозначения международные.
2) Курс валюты - это величина, которая показывает отношение между двумя валютами в конкретный промежуток времени.
3) Вероятно понадобятся некие репозитории/менеджеры валют и их курсов. По сути просто коллекция валют, куда можно сложить описания рубля, доллара,... и некая коллекция курсов, благодаря которой можно узнать сколько рублей дают за доллар на конкретную дату.
Если задание на абстрактные классы и наследование, то мой вариант - не вариант. Вообще не вижу как сюда притянуть наследование.
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Абстрактный класс - C++ vladrrom Помощь студентам 3 09.05.2017 15:35
Абстрактный класс Сырги C# (си шарп) 3 22.11.2012 01:13
абстрактный класс meta13 C# (си шарп) 2 22.03.2012 19:14
c# абстрактный класс tanek Помощь студентам 1 22.02.2012 11:23
абстрактный класс С++ zhenya.ya Помощь студентам 0 05.11.2010 20:23