Заполняющий интерфейс

Может кто-нибудь сказать мне, как я могу заполнить свои поля в моем интерфейсе IAccount? У меня ошибка в x.Add(new IAccount ...

public class IPersonRepo : IAccount
{
    string connectionstring = @"Server=SLI002/SQLEXPRESS;Database=atengturonDB;Trusted_Connection=true;";
    public int AccountsID
    {
        get
        {
            throw new NotImplementedException();
        }
        set
        {
            throw new NotImplementedException();
        }
    }
    public byte[] AccountUserName
    {
        get
        {
            throw new NotImplementedException();
        }
        set
        {
            throw new NotImplementedException();
        }
    }
    public byte[] AccountPassword
    {
        get
        {
            throw new NotImplementedException();
        }
        set
        {
            throw new NotImplementedException();
        }
    }
    public byte[] AccountSalt
    {
        get
        {
            throw new NotImplementedException();
        }
        set
        {
            throw new NotImplementedException();
        }
    }
    public void getAccount()
    {
        SqlConnection conn = new SqlConnection(connectionstring);
        using (SqlCommand comm = new SqlCommand())
        {
            List<IAccount> x = new List<IAccount>();
            comm.Connection = conn;
            comm.CommandText = "Select AccountsID,AccountsUserName,AccountsPassword,AccountsSalt from Accounts";
            comm.CommandType = CommandType.Text;
            SqlDataReader reader = null;
            conn.Open();
            comm.ExecuteNonQuery();
            reader = comm.ExecuteReader();
            while (reader.Read())
            {
                x.Add(new IAccount
              {
                  AccountsID = (int)reader["AccountsID"],
                  AccountUserName = (byte[])reader["AccountsUserName"],
                  AccountPassword = (byte[])reader["AccountsPassword"],
                  AccountSalt = (byte[])reader["AccountsSalt"]
              });

            }
            conn.Close();
        }
    }
}

2 ответа

Решение

Пожалуйста, переименуйте IPersonRepo в PersonRepo, префикс I означает интерфейс, но ясно, что это класс. Во-вторых, это не похоже на репо (= хранилище), но как Person (Но это спорно...:))

В-третьих, вы пытаетесь создать интерфейс - но вам нужно создать экземпляр класса, который реализует этот интерфейс:

//x.Add(new IAccount
//x.Add(new IPersonRepo
//x.Add(new PersonRepo
x.Add(new Person
          {
              AccountsID = (int)reader["AccountsID"],
              AccountUserName = (byte[])reader["AccountsUserName"],
              AccountPassword = (byte[])reader["AccountsPassword"],
              AccountSalt = (byte[])reader["AccountsSalt"]
          });

В-четвертых, возможно, вам стоит взглянуть на любой ORM, например, на NHibernate или Entity Framework. Может помочь вам, но это ваш звонок:)

Во-первых, никогда не используйте I префикс при выборе имени класса. Это не ошибка компиляции, но это очень запутанно, поскольку принято использовать I в качестве префикса для имен интерфейсов.
Итак, ваш класс должен называться PersonRepo и не IPersonRepo,
(однако вы можете назвать класс, начинающийся с I лайк (Ice), просто не используйте I в качестве префикса)

Во-вторых, вы не можете создать экземпляр интерфейса. Вы можете использовать переменную типа интерфейса, но создать экземпляр реального класса: IAccount MyAccount = new PersonRepo();

Другие вопросы по тегам