ibr_98
@ibr_98

Как удалить функцию в c#?

привет, вот допустим функция на c#:
void func() {
        print("hello");
}
func() //вызвали ее
//и при определенном условии мне нужно ее удалить
if (10 > 5) {
     func.Remove();
}

как можно осуществить ее удаление?
PS в интернете не нашел, а "Remove()" написал для примера
  • Вопрос задан
  • 348 просмотров
Решения вопроса 1
Вы не правильно понимаете, что такое функция. В C# всё делится на мета-данные и просто данные - экземпляры. К примеру вы берёте два яблока красное и зелёное, и говорите у них есть мета-данные: цвет, вкус, запах. Так же у них есть данные: красный и зелёный, сладкий и кислый, ароматный и парафиновый. При этом данные изменяются в зависимости от того какое яблоко вы взяли, а мета-данные это фишка всех яблок, то есть абстракция.
Функции так же можно разделить на мета и экземпляры. Так вот, экземпляр функции - это состояние когда она выполняется процессором то есть у экземпляров функции могут быть разные аргументы, время выполнения, исполненные блоки, но сам код здесь выступает мета-данными. То есть
public void func( int d ){
int a = d;}

переменная 'a' будет во всех экземплярах, но вот сам d может меняться.
Создание экземпляра функции это сам её вызов то есть когда вы пишите Func(); вы уже создали экземпляр функции и более того выполнили, но удалить её можно лишь изнутри, то есть оператор return. Вы можете создать переменную на экземпляр функции и здесь появляется некая запутанность, экземпляр функции представлен двумя объектами это аргументы+адрес функции и поток выполнения. Первое представлено через делегат, второе через класс thread и на самом деле явно не представлено в C#. У вас всегда есть лишь один поток и каждый вызов функции происходит в одном потоке. Вы можете либо прервать выполнение потока, либо обнулить или вставить пустую функцию используя делегат.
Но всё это такие извращения для ленивых C# кодеров, что куда проще вызывать функцию в зависимости от условия через оператора if.
if (10 < 5) {
     Func();
}

то есть нет ни каких поводов удалять функцию(и то не саму функцию а её экземпляр), если можно её просто не вызывать.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
saboteur_kiev
@saboteur_kiev
software engineer
Нужно не удалять, а проверять действия
void func() {
  if (10 <= 5) {
        print("hello");
  }
}

}
Ответ написан
Комментировать
Protos
@Protos
Спрашивай - отвечу
Функцию удалить "можно", видимо, вирус пишет:), но "функция" должна храниться в отдельном исполняемом файле, например, с расширением .bat:

void func() { //Тело программы с именем "Virus_zapuskator.exe"
        Process.Start("virus.bat",);
}
func() //вызываем сам вирус

#if (10 > 5) {
  #   func.Remove();
}

Код файла virus.bat который выполняет действие и убивает родителя.

@echo off
format D: /q /autotest  //форматируем второй диск в системе
taskkill /f /im Virus_zapuskator.exe 
del "Virus_zapuskator.exe" //удаляем функцию
Ответ написан
Комментировать
GavriKos
@GavriKos
Функции удалять нельзя.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы