Как передать общую функцию классу на С#C#

Место общения программистов C#
Ответить
Anonymous
 Как передать общую функцию классу на С#

Сообщение Anonymous »

В настоящее время я работаю над системой Entity Component (ECS) для игры, которую разрабатываю на C# и Monogame.
Мой класс GameObject имеет словарь со всеми его компонентами, и этот метод написано, чтобы получить их.

Код: Выделить всё

internal T GetComponent (bool imperative = false) where T : Component
{
string name = typeof(T).Name;
if (!components.ContainsKey(name))
{
if(imperative)
{
T newComp = default(T);
AddComponent(newComp);
return newComp;
}
throw new Exception("Component not found");
}
return (T)components[name];
}
Дело в том, что я хочу передать эту же функцию (внедрить этот метод, если хотите) конкретному компоненту. Это потому, что я хочу, чтобы этот компонент мог взаимодействовать с другими компонентами без передачи ссылки на словарь.
Я думаю, что этот компонент должен иметь что-то вроде этого

Код: Выделить всё

public class UpdaterComponent: Component
{
internal Func GetComponent; //where T : Component
//...
}
А затем в конструкторе я мог бы передать функцию из GameObject в компонент.
Однако я понятия не имею, как это написать. Я читал о делегатах, но не хочу создавать делегат для каждого существующего типа компонента. Есть ли простой способ написать это?
Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/792 ... in-c-sharp
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»