У меня есть компонент в Blazor, который принимает методы в качестве параметров.
<SuppliersTable Loader="@LoadS" LoaderO="@LoadO" Adder="@Add" Updater="@Update" Remover="@Remove" />
@code {
async Task<List<Supplier>> LoadS() => (await ModelServiceS.GetAllAsync()).ToList();
async Task<List<Operator>> LoadO() => (await ModelServiceO.GetAllAsync()).ToList();
async Task<bool> Add(Supplier model) => await ModelServiceS.AddAsync(model);
async Task<bool> Update(Supplier model) => await ModelServiceS.UpdateAsync(model);
async Task<bool> Remove(Supplier model) => await ModelServiceS.RemoveAsync(model);
}
Но если вы не поставите «@» перед именами методов, будет ли это что-то совершенно другое? Компилятор принимает оба пути, поэтому я спрашиваю. У меня такое ощущение, что с "@" он выполняет метод и передает возвращаемое значение в качестве параметра, а без "@" вы просто ссылаетесь на методы, которые будут вызываться родительским компонентом (что я и хочу). Может ли кто-нибудь предоставить мне более подробную информацию об использовании "@"?
Типы параметров компонента SuppliersTable следующие:
[Parameter] public Func<Task<List<Supplier>>> Loader { get; set; }
[Parameter] public Func<Task<List<Operator>>> LoaderO { get; set; }
[Parameter] public Func<Supplier, Task<bool>> Adder { get; set; }
[Parameter] public Func<Supplier, Task<bool>> Updater { get; set; }
[Parameter] public Func<Supplier, Task<bool>> Remover { get; set; }