Заполняющий интерфейс
Может кто-нибудь сказать мне, как я могу заполнить свои поля в моем интерфейсе 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()
;