Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# &引用&引用;无法实现接口成员,因为它不是公共的 公共接口IDatabaseContext:IDisposable{ IDbSet Entities1{get;set;} } 公共类MyDbContext:DbContext,IDatabaseContext{ IDbSet Entities1{get;set;} }_C#_Entity Framework_Dbcontext - Fatal编程技术网

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; }    
}