Я пытаюсь реализовать абстрактный или интерфейсный метод внутри другого метода на основе случая переключения. В зависимости от данного индекса я хотел бы реализовать другой метод.
Код
public interface choices
{
void Effect ();
}
public class Imple : choices
{
public void Choose(int index)
{
if(index == 1)
{
void Effect()
{
// implementation here
}
else if(index == 2)
// etc.
}
}
}
Можно ли это сделать, переопределив абстрактный метод? Спасибо.
--- EDIT ---
Я понимаю, что приведенный выше код и объяснение неясны, поэтому я попытаюсь объяснить лучше.
Ясоздание игры Unity, однако проблема, которую я имею, связана с интерфейсами и реализацией метода c #, и именно поэтому я не спрашивал Unity Forum. В этой игре у меня есть оружие с различными свойствами (характеристики, такие как урон и интеллект, занятые руки и т. Д.), Которые работают отлично.
Класс предмета (базовый класс)
public class Item
{
// stats and getters / setters
}
Класс оружия
public class Weapon : Item
{
public void Attack()
{
// attack enemies and reduce their health
// I want the Effect method to activate when attacking,
// if the method has been implementd
}
}
Я хотел бы иметь возможность создавать различные методы во время выполнения, которые могут выполнятьсяэффекты, например, нанесение большего урона при попадании по врагуТем не менее, я хотел бы реализовать эти методы во время выполнения на основе индекса, который соответствует эффекту. Причина в том, что оружие хранится в файле json, и при разборе его этот индекс поможет определить, какое действие имеет оружие. Таким образом, если индекс равен 1, реализация должна позволять оружию наносить дополнительный урон, но если оно равно 2, это будет иметь другой эффект. Для этого я создал класс OnHit и интерфейс IOnHit:
public class OnHit : IOnHit
{
public void Effect()
{
// empty
}
}
public interface IOnHit
{
void Effect();
}
Я ищу способ, чтобы это происходило динамически. Один из способов сделать это - создать статический класс со всеми эффектами, а затем передать туда индекс и продолжить. Тем не менее, это было бы проблематично для игры, так как он должен был бы проходить через переключатель каждый раз, когда игрок атакует (или 2, если у игрока 2 оружия). Итак, я ищу способ иметь интерфейс или абстрактный класс с абстрактными методами, которые можно реализовать один раз, а затем вызывать всякий раз, когда происходит воздействие оружия. Моя идея состояла в том, чтобы создать экземпляр класса OnHit внутри объекта оружия и связать там интерфейс IOnHit. Затем, чтобы реализовать код внутри него следующим образом:
public class Weapon : Item
{
OnHit oh = new OnHit();
IOnHit ioh = oh;
public void Attack()
{
// previous attack method
if(ioh.Effect is implemented)
ioh.Effect();
}
public void SetIndex(int index)
{
switch{
case 1:
ioh.Effect()
{
// implementation of the effect
}
break;
case 2:
ioh.Effect()
{
// implementation of different effect
}
break;
}
}
}
, где параметр index - это идентификатор эффекта, полученного из проанализированного json.
Еще раз спасибо.