C#接口类问题看不到方法

问题描述

|
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)\'???     

解决方法

最好的选择是放弃IGroups接口,并将该方法标记为静态。由于无论如何这只是一个数据库访问对象,因此将其作为静态方法是有意义的。 如果要保留接口,则必须实例化一个对象。
usrGrp.UserGroups = (new GetUsrGrps).GetGroups(usrGrp);
    ,
GetGroups
是一个实例方法。用
static
关键字标记它,或创建其包含类的实例并引用该实例中的方法。考虑到方法“ 2”是接口的一部分,我建议您使用实例路由,以便您的类定义仍与接口协定匹配。     ,您正在收到该错误,因为GetGroups不是GetUsrGrps上的静态方法。 您可能需要将其声明为静态,或者创建GetUsrGrps的新实例以调用GetGroups方法。     ,应该只是
usrGrp.UserGroups = GetGroups(usrGrp);
编译器认为您正在尝试调用静态方法,而GetGroups不是     ,你要
 IGroups groups = new GetUsrGrps();
 usrGrp.UserGroups = groups.GetGroups(usrGrp);
您当前正在调用它,就好像它是静态的一样,但是您的意图似乎是通过
IGroups
接口访问它。     ,您的方法不是静态的或您的类未实例化。 您需要创建该类的实例,例如:
var getUsrGrps = new GetUsrGrps();
然后改变
usrGrp.UserGroups = GetUsrGrps.GetGroups(usrGrp);
usrGrp.UserGroups = getUsrGrps.GetGroups(usrGrp);
要么 更改
public IList<Group> GetGroups(UserGroup usrGroup)
public static IList<Group> GetGroups(UserGroup usrGroup)
看起来任何一种都可以为您工作。