namespace Pilz.Plugins.Advanced; public abstract class PluginFunction : PluginFeature { protected PluginFunction(string functionType, string functionIdentifier) : base(functionType, functionIdentifier) { } protected PluginFunction(string functionType, string functionIdentifier, string? functionName) : base(functionType, functionIdentifier, functionName) { } public virtual object? Execute() { return Execute((PluginFunctionParameter?)null); } public virtual T? Execute(params object?[]? @params) { return Execute(new PluginFunctionSimpleParamter(@params)); } public virtual object? Execute(params object?[]? @params) { return Execute(new PluginFunctionSimpleParamter(@params)); } public virtual T? Execute(PluginFunctionSimpleParamter? @params) { if (Execute(@params) is T result) return result; return default; } public virtual object? Execute(PluginFunctionParameter? @params) { object? result = default; if (!OnPreExecute(@params, ref result)) result = ExecuteFunction(@params); OnPostExecute(@params, ref result); return result; } protected abstract object? ExecuteFunction(PluginFunctionParameter? @params); }