Интерфейсная реализация класса вопроса

Вот мой простой сенарио. У меня есть класс (класс BLL), который реализовал интерфейс. То, что я хочу сделать, это то, что на уровне предстанции я хочу, чтобы пользователи получали доступ только к интерфейсу и взаимодействовали с этим интерфейсом класса, а не с функцией класса напрямую. Есть ли способ сделать это?

Мой реализованный интерфейс класса BLL:

    public interface IOfis
    {

        bool Add(Ofis ofs);
        bool Update(Ofis ofs);


    }

    public class BLL_Ofis:IOfis
    {
        public bool Update(Ofis ofs)
        {
            DAL_Ofis ofs_dal = new DAL_Ofis();
            try
            {
                return ofs_dal.Update(ofs);
            }
            catch (Exception)
            {

                throw;
            }
            finally { ofs_dal = null; }
        }

      public bool Add(Ofis ofs_obj)
        {
            DAL_Ofis ofs_dal = new DAL_Ofis();
            try
            {
                return ofs_dal.Add(ofs_obj);
            }
            catch (Exception)
            {

                throw;
            }
            finally { ofs_dal = null; }
        }
}

Внутри presantatoin слоя я использую его так:

IOfis bll_ofis = new BLL_Ofis();
bll_ofis.Update();

Но в этой ситуации я также могу добраться до класса прямо так:

 BLL_Ofis bll_ofis = new BLL_Ofis();
 bll_ofis.Update();

что я не хочу этого. Я хочу достичь только метод, который объявлен внутри интерфейса.

2 ответа

Решение

Я не понимаю, почему вы этого хотите, но "решением" может быть изменение public методы в явных реализациях интерфейса. Для этого удалите модификаторы доступа (здесь public) и подготовить IOfis. к названию метода. Как это:

public class BLL_Ofis : IOfis
{
    bool IOfis.Update(Ofis ofs)
    {
        ...
    }

    ...
}

Явная реализация интерфейса может быть вызвана только тогда, когда тип переменной времени компиляции является типом интерфейса.

Вы должны реализовать метод Add в вашем классе. Что касается видимости, удалите public из объявления класса, это сделает его видимым только для кода, который находится в той же сборке.

Другие вопросы по тегам