"..."无法实现接口成员,因为它不是公共的

Acr*_*gma 9 c# entity-framework dbcontext

public interface IDatabaseContext : IDisposable {

    IDbSet<MyEntity1> Entities1 { get; set; }

}

public class MyDbContext : DbContext, IDatabaseContext {

    IDbSet<MyEntity1> Entities1 { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

由于此处描述的错误无法编译:http://msdn.microsoft.com/en-Us/library/bb384253(v = vs.90).aspx

然而,由于界面显然是公开的,所以这没有任何意义.这可能是什么错误?

Mar*_*ell 23

然而,由于界面显然是公开的,所以这没有任何意义.这可能是什么错误?

不,不是.private默认情况下,课程成员.这Entities1是私人的:

public class MyDbContext : DbContext, IDatabaseContext {    
    IDbSet<MyEntity1> Entities1 { get; set; }    
}
Run Code Online (Sandbox Code Playgroud)

请注意,这与interfaces 不同,其中所有内容都是,public并且访问修饰符没有意义.所以:要么成为会员public:

public class MyDbContext : DbContext, IDatabaseContext {    
    public IDbSet<MyEntity1> Entities1 { get; set; }    
}
Run Code Online (Sandbox Code Playgroud)

或者做一个明确的接口实现:

public class MyDbContext : DbContext, IDatabaseContext {    
    IDbSet<MyEntity1> IDatabaseContext.Entities1 { get; set; }    
}
Run Code Online (Sandbox Code Playgroud)

  • @Acrotygma放心:当别人发现某些东西时,只有通过来之不易的战斗经验自己犯了同样的错误,可能好几次 (6认同)
  • 亲爱的上帝。我怎么没看到?好吧,似乎我在耻辱的殿堂里永远地把自己永恒化了。:/ (3认同)

Hab*_*bib 7

在类中实现接口成员时,应该是public

请参阅:接口(C# 编程指南)

要实现接口成员,实现类的相应成员必须是公共的、非静态的,并且与接口成员具有相同的名称和签名。

public class MyDbContext : DbContext, IDatabaseContext {

    public IDbSet<MyEntity1> Entities1 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

或者正如@Marc Gravell 在评论中所说的那样,您可以执行Explicit interface implementation,可以在此答案中找到更多信息