Как скрыть функции внутри классов в C #? - PullRequest
0 голосов
/ 26 января 2012

Мне нужно скрыть несколько методов внутри класса, основываясь на параметре, который передается конструктору в c #.Как бы я это сделал?Заранее спасибо!

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

Более того, мне нужнооставьте это только один класс под названием «API», как мы его использовали во многих местах.Таким образом, идея использования более нового API с другим именем была исключена.

Теперь, наконец, у меня появилась идея включить более новый API в старый с условным скрытием методов доступа к реестру.

Ответы [ 5 ]

5 голосов
/ 26 января 2012

Нельзя переключать видимость участников ..... лучше всего иметь разные интерфейсы, которые скрывают участников.

public interface IName
{
   string Name { get; set; }
}


public interface INumber
{
   string PhoneNumber { get; set; }
}


public class Worker : IName, INumber
{
    public string Name { get; set; }
    public string PhoneNumber { get; set; }
}

Так что используйте Worker через интерфейс IName или INumber, и он будет скрывать других членов класса ....

0 голосов
/ 26 января 2012

Вы можете сделать что-то похожее, используя Динамическое генерирование кода , хотя это больше похоже на взлом, чем на реальный код, который следует использовать в производстве.

Возможно, если вы объясните , почему вам это нужно, вы можете получить более релевантные ответы.

0 голосов
/ 26 января 2012

Вы не можете изменить видимость методов, но вы можете передать параметр в один метод и выполнить некоторую логику в зависимости от вашего параметра, используя switch - case. Но это зависит от структуры вашего метода.
Попробуйте пересмотреть свой класс и изменить его дизайн. Возможно, вы сможете найти любой шаблон дизайна, который вам поможет.

0 голосов
/ 26 января 2012

Вам нужно будет реструктурировать код в несколько классов или интерфейсов. Вы не можете динамически изменять уровень видимости членов класса в зависимости от значения параметра. Участники - информация о времени строительства, а не время выполнения.

0 голосов
/ 26 января 2012

Я думаю, что вы можете посмотреть на ре-фактор здесь. Попробуйте создать базовый класс со всеми методами / свойствами, которые ведут себя одинаково независимо от параметра, а затем два дочерних класса, которые ведут себя по-разному. Также взгляните на шаблон фабрики классов.

...