Interal методы интерфейсов в C# - как это работает?

У меня вопрос по поводу этого кода:

internal interface IRepository {
  internal void LoadFromDB();
  internal void SaveToDB();
}

Компилятор все принял, но когда я реализовываю интерфейс в классе, компилятор требует, чтобы эти методы были строго public. В чем прикол? Зачем тогда разрешать делать их internal?

И даже если сам класс объявить как internal - всеравно требует public!

Собственно задача: Реализовать интерфейс в кругу одной сборки, о котором (и его методах) никто ничего не знает (снаружи этой сборки)


Ответы (1 шт):

Автор решения: Kalmankantaja

Реализуй explicitly наименования в классе:

internal interface IRepository
{
    internal void LoadFromDB();
    internal void SaveToDB();
}
public class Repository : IRepository
{
    void IRepository.LoadFromDB()
    {
    }

    void IRepository.SaveToDB()
    {
    }
}

Теперь методы в классе не будут доступны в других сборках, как и сам интерфейс, но сам класс будет доступен. Так же ты можешь просто сам класс указать как internal и сделать методы public

→ Ссылка