Вопрос о классе интерфейса C # не может увидеть метод - PullRequest
0 голосов
/ 14 апреля 2011
public interface IGroups
{
    IList<Group> GetGroups(UserGroup usrGrp);
}

public class GetUsrGrps : IGroups
{
    public IList<Group> GetGroups(UserGroup usrGroup)
    {
        List<Group> grps = new List<Group>();
        UserGroupDao UsrGrpDao = new UserGroupDao();
        DbDataReader ddr = UsrGrpDao.GetUserGroups(usrGroup);
        if (ddr.HasRows)
        {
            while (ddr.Read())
            {
                Group grp = new Group();
                grp.GroupId = Convert.ToInt32(ddr["groupId"]);
                grps.Add(grp);
            }
        }
        else
        {
            Group grp = new Group();
            grp.GroupId = Convert.ToInt32("0");
            grps.Add(grp);
        }
        return grps;
    }
}



 public UserGroup GetUser(UserGroup usrGrp)
    {

        UserGroupDao usrGroupDao = new UserGroupDao();
        DbDataReader ddr = usrGroupDao.GetUser(usrGrp);
        if (ddr.HasRows)
        {
            while (ddr.Read())
            {
                usrGrp.Id = Convert.ToInt32(ddr["id"]);
                usrGrp.FirstName = Convert.ToString(ddr["firstname"]);
                usrGrp.LastName = Convert.ToString(ddr["lastname"]);
                usrGrp.UserName = Convert.ToString(ddr["username"]);
            }
        }
        usrGrp.UserGroups = GetUsrGrps.GetGroups(usrGrp);
        return this;
    }

usrGrp.Groups is defined as IList<Group>...?  }

** usrGrp.UserGroups = GetUsrGrps.GetGroups (usrGrp);<- Intellisense не видит метод.Я получаю 'Ссылка на объект требуется для нестатического поля, метода или свойства' GetUsrGrps.GetGroups (UserGroup) '??? </p>

Ответы [ 6 ]

1 голос
/ 14 апреля 2011

Вы получаете эту ошибку, потому что GetGroups не является статическим методом в GetUsrGrps.

Вам нужно будет либо объявить его как статический, либо создать новый экземпляр GetUsrGrps для вызова метода GetGroups.

1 голос
/ 14 апреля 2011

GetGroups - это метод экземпляра. Пометьте его ключевым словом static или создайте экземпляр содержащего его класса и создайте ссылку на метод из этого экземпляра. Учитывая, что метод GetGroups является частью интерфейса, я бы порекомендовал пойти по маршруту экземпляра, чтобы определение вашего класса по-прежнему соответствовало контракту интерфейса.

0 голосов
/ 14 апреля 2011

Лучший вариант - отказаться от интерфейса IGroups и пометить метод как статический.Так как в любом случае это просто объект доступа к базе данных, имеет смысл использовать статический метод.

Если вы хотите сохранить интерфейс, вам придется создать экземпляр объекта.

usrGrp.UserGroups = (new GetUsrGrps).GetGroups(usrGrp);
0 голосов
/ 14 апреля 2011

Вы хотите

 IGroups groups = new GetUsrGrps();
 usrGrp.UserGroups = groups.GetGroups(usrGrp);

В настоящее время вы называете его так, как если бы он был статическим, но, похоже, вы намереваетесь получить к нему доступ через интерфейс IGroups.

0 голосов
/ 14 апреля 2011

Это должно быть просто

usrGrp.UserGroups = GetGroups(usrGrp);

Компилятор считает, что вы пытаетесь вызвать статический метод, который не является GetGroups

0 голосов
/ 14 апреля 2011

Ваш метод не статичен или ваш класс не создан.

Вам необходимо создать экземпляр класса, например:

var getUsrGrps = new GetUsrGrps();

затем изменить

usrGrp.UserGroups = GetUsrGrps.GetGroups(usrGrp);

до

usrGrp.UserGroups = getUsrGrps.GetGroups(usrGrp);

OR

изменение

public IList<Group> GetGroups(UserGroup usrGroup)

до

public static IList<Group> GetGroups(UserGroup usrGroup)

Похоже, что любой из них будет работать для вас.

...