Чтобы улучшить дальнейшую реализацию и предложить некоторые рекомендации и сделать все максимально универсальным в рамках проекта, я создал интерфейс с несколькими методами, которые следует использовать. Однако только один метод этого класса должен быть виден пользователю, вызывающему этот класс, поэтому я бы хотел, чтобы они были защищенного типа. Например
public class ClassThree
{
public ClassThree()
{
var classOne = new ClassOne();
class1.MethodOne();
}
}
Это несмотря на то, что ClassOne имеет 4 метода, 3 метода используются только в одном общедоступном классе, следовательно, частном или защищенном. Однако эти 3 метода необходимы для работы 4-го метода (в идеальном мире другие разработчики будут следовать тому же принципу). Поэтому я не хочу видеть следующее всплывающее окно на intellisense:
class1.MethodTwo();
class1.MethodThree();
class1.MethodFour();
Я знаю, что можно неявно вызывать методы из интерфейса, например
IInterface.MethodTwo<Type,Type>(string name)
{
//Do stuff here
}
Однако я хотел бы предотвратить все приведения при вызове указанных методов в самом ClassOne, поскольку это просто бельмо на глазу. Мне нравится, когда мой код чист, а для меня это совсем не чисто. Я думал об абстрактном классе, однако мой класс наследуется от другого класса. С интерфейсом я мог просто сделать
public ClassOne : ClassTwo, IInterface<Type1,Type2>
Когда я делаю это с абстрактным классом, Visual Studio говорит, что ожидается интерфейс. Любые идеи приветствуются и ценятся, поскольку я хотел бы улучшить свой код, облегчив свою жизнь и жизнь коллег-разработчиков, которым приходится использовать мой код.
Заранее спасибо!
Редактировать: Сценарий заключается в том, что может быть несколько классов, таких как ClassOne, которые по существу делают то же самое, но используют разные типы, поскольку объекты, которые они должны возвращать, содержат разные значения. Однако наращивание этих объектов более или менее одинаково, например:
- Соберите все данные API
- Получите список, который нужно экспортировать в API, и вызовите #3 или #4 в зависимости от типа.
- Экспорт типа 1 в API
- Экспорт типа 2 в API
Идея всегда одна и та же, но, естественно, для разных API потребуются разные переменные. Но чтобы обеспечить выполнение всех шагов, как и раньше, я хотел бы реализовать интерфейс или что-то еще, но шаги 1, 2 и 3 должны быть закрытыми или защищенными, и только шаг 2 должен быть доступен для класса, который его использовал. Однако, если я поставлю в интерфейс только метод 2, я никогда не смогу быть уверен, что другие будут реализовывать 1,3 и 4. И это своего рода цель здесь: P. При этом ClassOne также наследуется от другого класса, а не только от интерфейса.
Редактировать 2: я знаю, что интерфейсы предоставляют только общедоступные методы, поэтому я ищу альтернативы, отсюда и этот вопрос. Я знаю, что с этим не так, я просто не понимаю, как я могу сделать это так, как мне хотелось бы. Спасибо за ответы!
Редактировать 3: Интерфейс в настоящее время выглядит так, я просто изменил имена переменных для примера.
public interface IExport<in T, in TU>
{
void GetRequiredApiData();
bool MethodOne(List<Type> list);
bool ExportOne(T one);
bool ExportTwo(TU two);
bool ValidateExport();
}
ClassOne
) имеет некоторые методы, которые вы хотите скрыть от использования кода. Не могли бы вы уточнить, почему не работает создание закрытых или защищенных членов? Кроме того, что такоеClassThree
? Это потребляющий код? - person Asad Saeeduddin   schedule 23.06.2015