C# &引用&引用;无法实现接口成员,因为它不是公共的 公共接口IDatabaseContext:IDisposable{ IDbSet Entities1{get;set;} } 公共类MyDbContext:DbContext,IDatabaseContext{ IDbSet Entities1{get;set;} }
由于此处描述的错误,无法编译:C# &引用&引用;无法实现接口成员,因为它不是公共的 公共接口IDatabaseContext:IDisposable{ IDbSet Entities1{get;set;} } 公共类MyDbContext:DbContext,IDatabaseContext{ IDbSet Entities1{get;set;} },c#,entity-framework,dbcontext,C#,Entity Framework,Dbcontext,由于此处描述的错误,无法编译: 然而,这毫无意义,因为接口显然是公共的。这里可能有什么错误?在类中实现接口成员时,它应该是public 见: 要实现接口成员,请指定 实现类必须是公共的,非静态的,并且具有相同的 作为接口成员的名称和签名 公共类MyDbContext:DbContext,IDatabaseContext{ 公共IDbSet实体1{get;set;} } 或者正如@Marc gravel在评论中所说的,可以在中找到更多,接口成员也可以被实现为受保护的。 如果您不想,我们可以将其作
然而,这毫无意义,因为接口显然是公共的。这里可能有什么错误?在类中实现接口成员时,它应该是
public
见:
要实现接口成员,请指定
实现类必须是公共的,非静态的,并且具有相同的
作为接口成员的名称和签名
公共类MyDbContext:DbContext,IDatabaseContext{
公共IDbSet实体1{get;set;}
}
或者正如@Marc gravel在评论中所说的,可以在中找到更多,接口成员也可以被实现为受保护的。 如果您不想,我们可以将其作为抽象类保留 然而,这毫无意义,因为接口显然是公共的。这里可能有什么错误 不,不是。默认情况下,类上的成员是私有的。此
实体1
是私有的:
public class MyDbContext : DbContext, IDatabaseContext {
public IDbSet<MyEntity1> Entities1 { get; set; }
}
或者执行显式接口实现:
public class MyDbContext : DbContext, IDatabaseContext {
public IDbSet<MyEntity1> Entities1 { get; set; }
}
公共类MyDbContext:DbContext,IDatabaseContext{
IDbSet IDatabaseContext.Entities1{get;set;}
}
简化答案/逻辑- 您的问题是接口在继承类中是公共的(这就是为什么它被称为接口)
因此,您必须将派生类中的实现标记为public(在MyDbContext中)。我遇到了同样的问题,但发现我忘记了将接口的方法公开。确保接口的所有方法也是公共的 当您将“It”解释为指句子的主题时,它是非常有意义的:预期的实现成员,而不是接口成员。(换句话说,MyDbContext.Entities1…目前是私有的。)好吧,它不必是公共的-它也可以是一个显式的接口实现…@MarcGravel,是的,我应该在回答中加上这一点,他们不能;
受保护的
成员不会隐式实现接口,显式接口实现也不会受保护的
。亲爱的上帝。我怎么没看到呢?好吧,似乎我永远都在羞愧的殿堂里/@Acrotygma放心:当其他人发现某件事时,只有通过自己犯下同样错误的来之不易的战斗经验,可能是几次
public class MyDbContext : DbContext, IDatabaseContext {
IDbSet<MyEntity1> Entities1 { get; set; }
}
public class MyDbContext : DbContext, IDatabaseContext {
public IDbSet<MyEntity1> Entities1 { get; set; }
}
public class MyDbContext : DbContext, IDatabaseContext {
IDbSet<MyEntity1> IDatabaseContext.Entities1 { get; set; }
}