2015-05-25 5 views
-3

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

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(); 
     } 
    } 
} 
+3

Вы не можете создавать интерфейсы. – CodeCaster

+2

Как насчет переименования 'IPersonRepo' в класс PersonAccount: IAccount' - then' x.Add (new PersonAccount'? – StuartLC

+1

ваши методы-установки не реализованы –

ответ

0

Пожалуйста, переименуйте 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. Может помочь, но ваш вызов :)

+0

Спасибо за это сейчас, я понял! – RE0824C

0

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

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

+0

okay sir благодаря этой новой информации, я пытаюсь понять эти интерфейсы и репозитории – RE0824C