Интерфейсная реализация класса вопроса
Вот мой простой сенарио. У меня есть класс (класс 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
из объявления класса, это сделает его видимым только для кода, который находится в той же сборке.