【问题标题】:array of pointers to objects in another class [closed]指向另一个类中对象的指针数组[关闭]
【发布时间】:2014-01-27 09:14:28
【问题描述】:

我必须创建像DataBase 这样的类,其中包含菜单、添加用户、编辑用户、删除等。 用户来自User类。

看起来像:

 class base
 {
    protected int mAccounts=0;
    protected const int mMaxAccs=10;


    osoba[] list = new osoba[mMaxAccs];


    public void menu(){...}
    public void add()
    {
         user user1("Jurand","ze Spychowa",15231512,"1410-10-26","hue@x.com");
         mAccounts++;
    }

    ... useless code there

 }

然后有User

class user
    {
        private string mName;
        private string mSurname;
        private int mPesel;
        private DateTime mBDate;
        private string mEmail;

        osoba(string mName2, string mSurname2, string mPesel2, string mBDate2, string mEmail2)
            {
                mName = mName2;
                mSurname = mSurname2;
                mPesel = Convert.ToInt32(mPesel2);
                mBDate = Convert.ToDateTime(mBDate2);
                mEmail = mEmail2;
            }

问题在于添加新帐户。我完全不知道如何让它工作 因此用户将存储在基类中,您将有权编辑和添加它们等。

有谁知道如何让它工作(正确创建对象)?

【问题讨论】:

  • 没有类及其字段(或者更确切地说是属性)private 是一个好的开始。如果它们不公开,则无法从外部访问它们。此外,构造函数参数可以具有相同的名称,只需使用 this.mName = mName; - this 指的是类引用(因此您正在访问字段),没有它,您将获得参数,因为它们有优先级。

标签: c# arrays class constructor


【解决方案1】:

我建议在 User 类中添加属性:

class User
{
    public string mName { get; private set; }
    public string mSurname { get; private set; }
    public int mPesel { get; private set; }
    public DateTime mBDate { get; private set; }
    public string mEmail { get; private set; }

    //constructor for User class
    public User(string mName2, string mSurname2, string mPesel2, string mBDate2, string mEmail2)
    {
            mName = mName2;
            mSurname = mSurname2;
            mPesel = Convert.ToInt32(mPesel2);
            mBDate = Convert.ToDateTime(mBDate2);
            mEmail = mEmail2;
    }
}

并修改您的添加方法(也更改了将数据从数组存储到列表的对象):

class MyDB
 {

    List<User> list = new List<User>();

    public void add()
    {
         //use constructor to create new object
         User person = new User("Jurand", "ze Spychowa","15231512","1410-10-26","hue@dupa.com");
         //add object to list
         list.Add(person);
    }
 }

在代码中混合使用不同的语言不是一个好主意,因此请尽量避免命名对象/方法,如“osoba”。

您可能会受益于阅读以下文章(波兰语): C# Constructors C# Properties

【讨论】:

    【解决方案2】:

    我相信您的 add() 方法中唯一缺少的是:

    osoba[mAccounts] = user1;
    

    mAccounts++ 行之前。

    仅当您的 User 类将成为仅存储数据且不包含任何方法(可能除了格式化、转换等)的愚蠢数据对象时才公开字段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-17
      • 2021-05-20
      • 1970-01-01
      • 1970-01-01
      • 2018-08-26
      • 1970-01-01
      • 2014-01-26
      • 2016-12-23
      相关资源
      最近更新 更多