У меня есть общие функции, которые должны использоваться только некоторыми производными классами. Чтобы кодировать каждую функцию только один раз, я использую базовый класс. Мне нужно определить функции как защищенные, чтобы скрыть их в производных классах, которые их не используют, поэтому нет возможности использовать виртуальные и переопределить, потому что уровень защиты не может быть изменен в этом случае. Вот мой код Это работает так, как я хотел, но ios нет лучшего способа сделать это?
class Base
{
protected void Initialize()
{
}
protected void doTask1()
{
}
protected void doTask2()
{
}
}
class Derived1 : Base
{
public void Initialize()
{
base.Initialize();
}
public new void doTask1()
{
base.doTask1();
}
}
class Derived2 : Base
{
public void Initialize()
{
base.Initialize();
}
public new void doTask2()
{
base.doTask2();
}
}
Любая помощь приветствуется ...
doTask1 () должна быть доступна только в классе Derived1 и doTask2 () только в классе Derived2. Благодаря ответу @Fildor я решил это с помощью интерфейсов. Все производные классы являются производными от одного базового класса. Базовый класс реализует все функции в интерфейсах.
public class Base : I_Derived1, I_Derived2
{
// implementations of all methods ...
doTask1()
{ // ...
}
doTask2()
{ // ...
}
initialize()
{ // ...
}
{
public interface I_Derived1
{
doTask1();
initialize();
}
public interface I_Derived2
{
doTask2();
initialize();
}
class Derived1 : Base
{
}
class Derived2 : Base
{
}
// then the interfaces are used ...
I_Derived1 d1 = new Base();
I_Derived2 d2 = new Base();
d1.doTask1();
d2.initialize();
d2.doTask2();
// ...
Это решило мою проблему, спасибо. В моем реальном проекте некоторые функции класса Base используются 10 или более производными классами, некоторые - всеми, а некоторые - только 2 или 3. Пользователь получает DLL, которая обслуживает его. Списки экземпляров производного класса, каждый из которых позволяет ему использовать функции, которые имеют для этого смысл.