问题描述
|
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)
看起来任何一种都可以为您工作。