Явная реализация интерфейса с модификаторами доступа - PullRequest
0 голосов
/ 04 июня 2019

эта проблема заключается в том, что я хочу, чтобы класс DataHelper был внутренним, чтобы его мог использовать только один и тот же проект. но я использую интерфейсы, которые не позволяют модификатор доступа, что будет подход для этого. Спасибо

public interface IDataHelper<T>{

    int Insert(T aType)
}

//implict implementation //flat insert logic
internal class ProductDataHelper : IDataHelper<Product>{

    internal int Insert(Product aType){  //cannot use internal access modifier and dont need public

        //flat insert logic

        return 1;
    }
}

//explict implementation //flat insert logic
Public class ProductDataHelper : IDataHelper<Product>{

    int IDataHelper<Product>.Insert(Product aType){ //this becomes private

        //flat insert logic

        return 1;
    }
}

//insert with business logic
public class ProductDataHandler{

    public int Add(Product aType){

        //insert with business logic
        new Insert(Product); // this is not accessable if explict interface implementation is done

        return 1;
    }
}

1 Ответ

2 голосов
/ 04 июня 2019

Реализация методов интерфейса должна быть публичной, вот что означает реализация интерфейса.Тот факт, что класс является внутренним, означает только то, что класс известен только проекту, в котором он объявлен, но это не мешает этому проекту создавать экземпляр этого класса и передавать его другим проектам как «объект» или как открытый интерфейс.,Между тем вы всегда можете объявить сам интерфейс как внутренний.

internal interface IDataHelper<T>
{
    int Insert(T aType);
}

internal class ProductDataHelper : IDataHelper<Product>
{
    public int Insert(Product aType)
    {  
        // ...
    }
}

nb Вопреки тому, что предлагает комментарий в вашем вопросе, явные реализации методов интерфейса также public, хотяключевое слово public отсутствует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...