Morpheus_God
@Morpheus_God

Как составить класс для пользователей?

Добрый день. Нужна помощь с пониманием как создать класс который будет выступать хранилищем комментариев от пользователей. Это не боевое приложение и никогда им не будет. Скорее для общего понимания как устроено.

Есть вот такой класс User:
public class User
    {
        public int UserID;
        public string NickName;
        public string HomeTown;
        public string BirthDate;
        public string DateOfRegistration;
        public UserRole Role;

        public User(int userid,string nickname,string hometown,string birthdate, string date_of_registration, UserRole role)
        {
            this.UserID = userid;
            this.NickName = nickname;
            this.HomeTown = hometown;
            this.BirthDate = birthdate;
            this.DateOfRegistration = date_of_registration;
            this.Role = role;
        }

        public override string ToString()
        {
            return $"UserID --> {UserID}\nNickName --> {NickName}\nNomeTown --> {HomeTown}\nBirthDate --> {BirthDate}\nDateOfRegistration --> {DateOfRegistration}\nUserRole --> {Role}";
        }
    }

Такой вот enum для UserRole:
public enum UserRole : byte
    {
        Administrator,
        Moderator,
        DefaultUser,
    }

И есть класс для самих комментариев:
public class UserContent
    {
        public int ContentID;
        public string Content;
        public User Author;
        public string ContentTime;

        public UserContent(int content_id, string content, User author, string content_time)
        {
            this.ContentID = content_id;
            this.Content = content;
            this.Author = author;
            this.ContentTime = content_time;
        }

        public override string ToString()
        {
            return $"ID Статьи --> {ContentID}\nСтатья --> {Content}\nАвтор статьи --> {Author.NickName}\nДата создания --> {ContentTime}";
        }

    }


Сложность в том, как передать в класс комментариев поле с ником юзера? Второй конструктор для юзера не подойдет. Так как при инициализации класса надо руками прописывать ник. А надо, что бы ник брался уже из поля класса Юзер.

Вот так оно у меня выглядит в Program.cs:
static void Main(string[] args)
        {
            
            List<User> users = new List<User>();
            users.Add(new User(1,"Morpheus","Zion","Dec 15,1985","Jan 12, 2010",UserRole.Administrator));
            users.Add(new User(2,"Trinity","Zion","May 10,1980","Sep 6, 2012", UserRole.Administrator));
            users.Add(new User(3,"Apok","Zion","Mar 22,1970" , "Feb 11, 2011", UserRole.Moderator));
            users.Add(new User(4,"Neo", "Los-Angeles","Jul 2,1982", "Dec 7,2012", UserRole.DefaultUser));

            List<UserContent> content = new List<UserContent>();
            content.Add(new UserContent(1, "Hello Zion!", new User("Morpheus"), "May 24,2018"));

            Console.ReadKey();
        }

Вопрос в этой строчке:
content.Add(new UserContent(1, "Hello Zion!", new User("Morpheus"), "May 24,2018"));

Вместо new User просто хотелось бы передать user.NickName.
Возможно ли такое?
  • Вопрос задан
  • 151 просмотр
Решения вопроса 2
@heartdevil
плыву как воздушный шарик
var theUser = new User("Morpheus");
content.Add(new UserContent(1, "Hello Zion!", theUser, "May 24,2018"));


Другое дело, что передевать нужно что-то уникальное, а не NickName. Чтобы однозначно определить пользователя. Это, кстати, почти везде надо делать, где есть связи типа User-Comments и другие.
Ответ написан
myjcom
@myjcom
Тут немного перепроектировать нужно, в общих чертах:
spoiler
public class User
{
    //....
    public string getID()
    {
        return UserID;
    }
}

struct Message
{
    public int contentID;
    public string content;
    public string userID;
    public string contentTime;
}
public class UserContent
{
    public List<Message> messsages;
    public UserContent(...)
    {
        ...
    }
    public addMessage(..., User user)
    {
        //...     
        messages.Add(..., user.getID());
    }
    public findMessages(User user)
    {
        //...
    }
}

static void Main(string[] args)
{
    //...
    var morpheus = new User(1,"Morpheus","Zion","Dec 15,1985","Jan 12, 2010",UserRole.Administrator);
    var trinity  = new User(2,"Trinity","Zion","May 10,1980","Sep 6, 2012", UserRole.Administrator);
    UserContent content = new UserContent(...);
    content.addMessage(1, "Hello Zion!", morpheus, "May 24,2018");
    content.addMessage(1, "Hello Zion!", trinity, "May 24,2018");
    Console.ReadKey();
}

Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы