Как провести удаление функции в c#?

Всём привет)

Недавно захотел сделать картонную игру Мафия, для практики. И для проработки персонажа Красотка требуется уничтожить способность другой карты. Нету ли возможности в c# аннулировать или же попросту удалить функцию?
Код могу скинуть, хотя геммора он добавит немало
  • Вопрос задан
  • 136 просмотров
Пригласить эксперта
Ответы на вопрос 3
VoidVolker
@VoidVolker Куратор тега C#
Dark side eye. А у нас печеньки! А у вас?
public class Foo
{
    public Action Bar;
    public bool BarEnabled = true;

    private void _Bar()
    {
        if (!BarEnabled) { return; }
        // Some code
    }
}

public class Foo
{
    public Action Bar;

    public void BarOn()
    {
        Bar = _Bar;
    }

    public void BarOff()
    {
        Bar = Noop;
    }

    private void _Bar()
    {
        // Some code
    }

    private static void Noop() { }
}
Ответ написан
@kttotto
пофиг на чем писать
Я думаю не совсем верно вопрос задан.

Если Вы хотите именно добавлять и удалять методы на объекте, то Вам нужны делегаты. Сделаете поле у карты типа делегата, который объявите и потом этому полю меняйте методы, либо обнуляйте на метод, который ничего не делает. Можете взять готовые типы делегатов тут.

Если же Вам надо, чтобы объект просто делал или не делал один заранее определенный метод, то делаете у объекта буловский флаг и метод, который будет этот флаг переключать. А внутри нужного метода, сначала проверяете состояние этого флага, прежде чем что-то сделать. Этот вариант Вам показали постами выше.
Ответ написан
Комментировать
w1ld
@w1ld
Программирую
public interface IActionable {
    bool CanFunction { get; set; }
}

public class Doctor : IActionable
{
    public bool CanFunction { get; set; }
    public void Heal () { 
        if( ! CanFunction) return;
        // heal!
    }
}

public class Beauty : IActionable { 
    public void Disable(IActionable someone) { 
        someone.CanFunction = false;
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы