Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
1 / 1 / 1
Регистрация: 13.12.2011
Сообщений: 40
1

Что можно оптимизировать или улучшить в приведенном коде

26.12.2011, 13:04. Показов 1248. Ответов 13
Метки нет (Все метки)

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
using System;
using System.Collections.Generic;
 
namespace ConsoleApplication1
{
    public interface IPerson
    {
        string Name { get; set; }
        string Surname { get; set; }
        int Age { get; set; }
        bool Gender { get; set; }
    }
    public class Person:IPerson
    {
        protected string _name;
        protected string _surname;
        protected int _age;
        protected bool _gender;
        public Person(string name,string surname,int age,bool gender)
        {
            _name = name;
            _surname = surname;
            _age = age;
            _gender = gender;
        }
        public string Name { get { return _name; } set { _name = value; } }
        public string Surname { get { return _surname; } set { _surname = value; } }
        public int Age { get { return _age; } set { _age = value; } }
        public bool Gender { get { return _gender; } set { _gender = value; } }
    }
    public class Student : Person
    {
        public Student(string name, string surname, int age, bool gender,int course):base(name,surname,age,gender){
            _course = course;
        }
        private int _course;
        public int Course { get { return _course; } set { _course = value; } }
        public override string ToString(){
            return string.Format("Name: {0} Surname : {1} Age : {2} Gender : {3} Course : {4}", _name, _surname, _age,
                                 _gender, _course);
        }
    }
    public class Employer:Person
    {
        public Employer(string name, string surname, int age, bool gender, int experience, decimal salary) : base(name, surname, age, gender)
        {
            _experience = experience;
            _salary = salary;
        }
        private int _experience;
        private decimal _salary;
        public int Experience { get { return _experience; } set { _experience = value; } }
        public decimal Salary { get { return _salary; } set { _salary = value; } }
        public override string ToString(){
            return string.Format("Name: {0} Surname : {1} Age : {2} Gender : {3} Experience : {4} Salary : {5}", _name, _surname, _age,
                                 _gender, _experience, _salary);
        }
    }
    class Program
    {
        static void Main()
        {
            List<IPerson>list=new List<IPerson>{new Employer("Dima", "Kibun",21,true,3, 2500),new Student("Olga","Gerlichko",18,false,2)};
            foreach (var person in list)
            {
                Console.WriteLine(person.ToString());
            }
        }
    }
}
Сделал такой пример для пробы .Я так понимаю ,что в Properties классов мы можем применить какую то логику обработки(проверки и тд. и тп.), ее я не писал (но в принципе она должна быть), но все же интересно , правильно ли я понял данный материал , и парвильный ли я подход выбрал для реализации иерархии классов.У меня бзик на инкапсуляции(часто бывает лишнего по написываю), Оцените пожалйсто мой код, если у кого нибудь может дать интересные статьи про инкапсуляции почитать буду очень благодарен.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.12.2011, 13:04
Ответы с готовыми решениями:

Запустится ли? Что можно улучшить/оптимизировать?
Впервые собираю компьютер, волнуюсь. Бюджет экономный - 15 000. Будет использоваться как браузер и...

Игра в камень,ножницы бумага.Что можно улучшить\оптимизировать?
// KamenNozhnicyBumaga.cpp: определяет точку входа для консольного приложения. // #include...

Создание матричной алгебры, что можно улучшить в коде?
Дан код программы на C++ создающий классы матриц и методы для работы с ними. Программа работает....

Какие ошибки есть в коде и что можно улучшить?
Всем привет, есть вот такой код, подскажите, что у меня здесь не правильно и что можно было бы...

13
Эксперт .NET
15367 / 11650 / 3056
Регистрация: 17.09.2011
Сообщений: 19,495
26.12.2011, 13:34 2
Интерфейс тут лишний. Интерфейс описывает поведение, а класс описывает сущность.
Правильнее сделать класс Person абстрактным
1
1 / 1 / 1
Регистрация: 13.12.2011
Сообщений: 40
26.12.2011, 13:41  [ТС] 3
Спс , а я думал тут еще логику проверки написать
C#
1
public string Name { get { return _name;/*Тут*/ } set { _name = value; /*Тут*/} }
Но это и вправду можно и без интерйфейса сделать)
0
1267 / 968 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
26.12.2011, 14:28 4
У меня бзик на инкапсуляции(часто бывает лишнего по написываю)
от бзиков надо избавляться, это вредная штука
если это дело запустить может развиться перфекционизм который потом придется лечить
2
1 / 1 / 1
Регистрация: 13.12.2011
Сообщений: 40
26.12.2011, 23:38  [ТС] 5
Спасибо порадовали))
0
91 / 90 / 11
Регистрация: 09.12.2011
Сообщений: 233
27.12.2011, 00:32 6
Позвольте присоединиться к дискуссии
1) Я бы "Gender" заменил на IsMale ибо в этом случае более понятно что есмь true а что false, или вообще создал бы перечисление Gender со значениями Male; Female;
2) Учитывая что проверки у тебя все равно пока не происходит, убрал бы покамест
C#
1
2
3
4
        protected string _name;
        protected string _surname;
        protected int _age;
        protected bool _gender;
Заменив каждую пару
C#
1
2
protected string _name;
public string Name { get { return _name; } set { _name = value; } }
на
C#
1
public string Name { private set; get; } // "private set" ибо нехорошо когда данные о человеке можно изменять по ходу выполнения
1
52 / 45 / 4
Регистрация: 07.10.2010
Сообщений: 95
27.12.2011, 01:17 7
Поумничаю я.
В таких задачах как мне кажется базовый класс лучше не наследовать, а инкапсулировать.
То есть каласс студент будет выглядеть как то так
C#
1
2
3
4
public class Student 
    {
           public Person PersonInfo {get; set;}
    }
Как мне кажется такая конструкция более гибкая. То есть был студент, стал работником, так как сам человек не менялся, мы просто жонглируем им. А при необходимости полиморфизма всегда можно применить интерфейс и повыводить поля базового класса наружу.
C#
1
2
3
4
public class Student 
    {
           public string Name {get {return PersonInfo.Name; } }
    }
И еще - обычно классы с именами Employer имеют тенденцию превращаться в фабрики. И логичнее возвращаемым классу просто передавать базовую часть(в данном случае человека), а не создавать все заново
1
16 / 16 / 3
Регистрация: 16.08.2011
Сообщений: 62
27.12.2011, 16:51 8
Если речь идет о WinForms то менять нечего... Если же речь идет о WPF или Silverlight я бы заменил обычные свойства на DependencyProperty они обладают гораздо более экономичной моделью хранения данных в управляемой куче.. Таким образом ресурсов будет потрачено меньше..
0
1 / 1 / 1
Регистрация: 13.12.2011
Сообщений: 40
29.12.2011, 14:55  [ТС] 9
А Если это должна быть библиотека классов , точгда что??
0
3 / 3 / 1
Регистрация: 12.05.2011
Сообщений: 118
31.12.2011, 20:03 10
C#
1
string Name { get; set; }, Surname { get; set; }
Мелочь, но код будет выполнятся в раза 2 быстре.

Сори, на что ума по пьяне хватило то и написал.

С новым годом!
0
Эксперт .NET
15367 / 11650 / 3056
Регистрация: 17.09.2011
Сообщений: 19,495
01.01.2012, 02:32 11
Цитата Сообщение от EdMi4 Посмотреть сообщение
код будет выполнятся в раза 2 быстре.
В сравнении с чем?

С новым годом!
0
3 / 3 / 1
Регистрация: 12.05.2011
Сообщений: 118
01.01.2012, 06:56 12
В сравнении с этим:
C#
1
2
string Name { get; set; }
string Surname { get; set; }
0
Эксперт .NET
15367 / 11650 / 3056
Регистрация: 17.09.2011
Сообщений: 19,495
01.01.2012, 09:35 13
Простите, но я вижу разницу только в том, что у вас объявление свойств происходет на одной строчке, а не на двух.
В чем прирост производительности? Да еще и в два раза?
0
82 / 82 / 10
Регистрация: 20.05.2011
Сообщений: 145
01.01.2012, 13:20 14
Цитата Сообщение от kolorotur Посмотреть сообщение
Простите, но я вижу разницу только в том, что у вас объявление свойств происходет на одной строчке, а не на двух.
В чем прирост производительности? Да еще и в два раза?

Мне вот тоже интересно!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.01.2012, 13:20

Посмотрите, что можно оптимизировать в моем коде?
Сабж собственно. Проект для CodeBlocks.

Определитель матрицы: что исправить или оптимизировать в коде
Здравствуйте, нужна небольшая помощь по поводу исправления, оптимизации алгоритма нахождения...

Что можно поменять или улучшить в сборке игрового ПК?
Всем привет! Решил собрать себе хороший комп в следующей конфигурации: Intel Core i7-7700K...

Парсер математических выражений - можно ли оптимизировать и улучшить код
Добрый день возник следующий вопрос, в программировании не сильно большой гуру пошел на...

Что значит public string T и все что дальше в приведенном коде?
class String { private string A; public String() { } ...

Чем можно заменить string в приведенном коде
Пожалуйста, вот программа, но она написана с использованием оператора string, а его мы еще не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.