编译器说我没有实现我的界面,但我是?

Che*_*hev 12 .net c# inheritance interface

好的,我有两个名称空间.一个包含我的界面,一个包含实现类.像这样:

namespace Project.DataAccess.Interfaces
{
    public interface IAccount
    {
        string SomeMethod();
    }
}

namespace Project.DataAccess.Concrete
{
    class Account : Project.DataAccess.Interfaces.IAccount
    {
        string SomeMethod()
        {
            return "Test";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

使用此代码我收到一个错误:

'Project.DataAccess.Concrete.Account'没有实现接口成员'Project.DataAccess.Interfaces.IAccount.SomeMethod'.'Project.DataAccess.Concrete.Account.SomeMethod'无法实现接口成员,因为它不是公共的

如果我将类和方法公开,它就可以正常工作.但是,如果我改为使用接口名称限定方法名称,那么它也会修复它.为什么?例如:

namespace Project.DataAccess.Concrete
{
    class Account : Project.DataAccess.Interfaces.IAccount
    {
        string IAccount.SomeMethod()
        {
            return "Test";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么要修复它?如果我不这样做,为什么必须公开呢?

要清楚

我很清楚将其公之于众.使方法签名看起来像这样没有公开修改它:

string IAccount.SomeMethod()
Run Code Online (Sandbox Code Playgroud)

为什么?

Chr*_*Wue 24

接口实现需要公开或明确:

上市:

class Account : IAccount
{
    public string SomeMethod()
    {
        return "Test";
    }
}
Run Code Online (Sandbox Code Playgroud)

明确:

class Account : IAccount
{
    string IAccount.SomeMethod()
    {
        return "Test";
    }
}
Run Code Online (Sandbox Code Playgroud)

private如果您未指定访问修饰符,则C#中的默认访问修饰符.