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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.03.2015, 12:15   #1
kvi2994
Новичок
Джуниор
 
Регистрация: 05.03.2015
Сообщений: 2
Печаль Вопрос по наследованию с#

Задача следующая: есть два класса (project и task), проект и задачи. У нас может быть много проектов. Проект может существовать отдельно от задач (задач у проекта равно нулю), или проект может делиться на задачи. Задача без проекта существовать не может. Вопрос состоит в том, как связать эти два класса? В любом случае нужно запретить прямое создание экземпляр объекта task.


Код:
Вариант 1.

class project
{
...
...
list<task> Project_Task = new list<task>();
...
}

Вариант 2.

Код C#
abstract class task
{
...
...
}
 
class project:task
{
...
}
kvi2994 вне форума Ответить с цитированием
Старый 05.03.2015, 12:23   #2
BOZKURT
Пользователь
 
Регистрация: 14.10.2009
Сообщений: 70
По умолчанию

Код:
public class Project
{
    private IList<Task> _tasks = new List<Task>();

    public IList<Task> Tasks { get { return _tasks; } }
}

public class Task
{
    private Project _owner;

    public Task(Project owner)
    {
        if(owner == null)
            throw new ArgumentNullException("owner");

        //тут надо бы еще делать проверку на - может ли проект делиться задачей с другими проектами

        _owner = owner;
    }
}
BOZKURT вне форума Ответить с цитированием
Старый 05.03.2015, 13:01   #3
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

BOZKURT: это не запрещает прямое создание задач
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 05.03.2015, 13:04   #4
BOZKURT
Пользователь
 
Регистрация: 14.10.2009
Сообщений: 70
По умолчанию

Я об этом и не говорил. По крайней мере запрещает создание задачи без проекта.
BOZKURT вне форума Ответить с цитированием
Старый 05.03.2015, 13:10   #5
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Я позволил себе немного дополнить Ваш код, чтобы Task нельзя было создать явно

Код:
public class Task
    {
        private Project _owner;

        protected Task(Project owner)
        {
            if (owner == null)
                throw new ArgumentNullException("owner");

            //тут надо бы еще делать проверку на - может ли проект делиться задачей с другими проектами

            _owner = owner;
        }
    }
    
    public class Project
    {

        private class TaskPrivateCreator : Task
        {
            public TaskPrivateCreator(Project owner)
                : base(owner)
            {
            }
        }

        private IList<Task> _tasks = new List<Task>();

        public IList<Task> Tasks { get { return _tasks; } }


        public Task CreateTask()
        {
            Task task = new TaskPrivateCreator(this);
            // если надо, то таску можно сразу добавлять в список _tasks
            return task;
        }

    }
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 05.03.2015, 13:16   #6
BOZKURT
Пользователь
 
Регистрация: 14.10.2009
Сообщений: 70
По умолчанию

Одна голова хорошо - два лучше
BOZKURT вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопрос по наследованию denrubun Общие вопросы C/C++ 14 25.12.2012 12:21
Вопрос по множественному наследованию классов с++ GartesK Общие вопросы C/C++ 7 14.11.2011 22:00
задача по наследованию в С++ Евгений1221 Помощь студентам 1 12.05.2011 01:13
Вопрос по наследованию katbka Помощь студентам 0 13.05.2010 18:31