Из официальной документации Microsoft:
Параметры компонента следует объявлять как автосвойства, что означает
что они не должны содержать пользовательскую логику в методах доступа get или set
. Например, следующее свойство StartData является
автосвойством:
csharp [Parameter] public DateTime StartData { get; set; }
https://learn.microsoft.com/en-us/aspne ... etcore-9.0
Ну, это догма, потому что я не вижу оправдания.
Я согласен, что не должно быть сложного логика, но есть важный случай, когда простая логика должно быть - это проверка.
Пример
Значение параметра theme компонента AdmonitionBlock должно быть либо элемент перечисления StandardThemes или элемент перечисления CustomThemes, который должен быть определен с помощью метода defineThemes перед использованием компонента AdmonitionBlock:
public partial class AdmonitionBlock : Microsoft.AspNetCore.Components.ComponentBase
{
public static string CSS_NAMESPACE = "AdmonitionBlock";
public enum StandardThemes { regular }
protected internal static Type? CustomThemes;
public static void defineThemes(Type CustomThemes)
{
YDF_ComponentsHelper.ValidateCustomTheme(CustomThemes);
AdmonitionBlock.CustomThemes = CustomThemes;
}
protected string _theme = AdmonitionBlock.StandardThemes.regular.ToString();
[Microsoft.AspNetCore.Components.Parameter]
public object theme
{
get => this._theme;
set => YDF_ComponentsHelper.
AssignThemeIfItIsValid(value, AdmonitionBlock.CustomThemes, ref this._theme);
}
protected internal static bool mustConsiderThemesCSS_ClassesAsCommon = YDF_ComponentsHelper.areThemesCSS_ClassesCommon;
public static void considerThemesAsCommon()
{
AdmonitionBlock.mustConsiderThemesCSS_ClassesAsCommon = true;
}
[Microsoft.AspNetCore.Components.Parameter]
public bool areThemesCSS_ClassesCommon { get; set; } =
YDF_ComponentsHelper.areThemesCSS_ClassesCommon || AdmonitionBlock.mustConsiderThemesCSS_ClassesAsCommon;
}
Проверка выполняется классом ComponentsHelper (не только для компонента AdmonitionBlock ):
public abstract class ComponentsHelper
{
public static bool areThemesCSS_ClassesCommon = false;
public static void ValidateCustomTheme(Type CustomThemes)
{
if (!CustomThemes.IsEnum)
{
throw new CustomYDF_ThemeIsNotEnumerationException();
}
}
public static void AssignThemeIfItIsValid(object value, Type? customThemes, ref string _theme)
{
if (value is TStandardThemes standardTheme)
{
_theme = $"{ standardTheme }";
return;
}
string stringifiedThemeValue = value.ToString() ?? "";
if (customThemes is not null)
{
Type customThemesType = customThemes;
if (customThemesType.IsEnum && Enum.GetNames(customThemesType).Contains(stringifiedThemeValue))
{
_theme = stringifiedThemeValue;
return;
}
}
throw new InvalidThemeParameterForYDF_ComponentException();
}
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... properties
ПОЧЕМУ параметры компонента Blazor должны быть автоматическими свойствами? ⇐ C#
Место общения программистов C#
1734974375
Anonymous
Из официальной документации Microsoft:
Параметры компонента следует объявлять как автосвойства, что означает
что они не должны содержать пользовательскую логику в методах доступа get или set
. Например, следующее свойство StartData является
автосвойством:
csharp [Parameter] public DateTime StartData { get; set; }
https://learn.microsoft.com/en-us/aspnet/core/blazor/comComponents/?view=aspnetcore-9.0
Ну, это догма, потому что я не вижу оправдания.
Я согласен, что не должно быть сложного логика, но есть важный случай, когда простая логика должно быть - это проверка.
Пример
Значение параметра theme компонента AdmonitionBlock должно быть либо элемент перечисления StandardThemes или элемент перечисления CustomThemes, который должен быть определен с помощью метода defineThemes перед использованием компонента AdmonitionBlock:
public partial class AdmonitionBlock : Microsoft.AspNetCore.Components.ComponentBase
{
public static string CSS_NAMESPACE = "AdmonitionBlock";
public enum StandardThemes { regular }
protected internal static Type? CustomThemes;
public static void defineThemes(Type CustomThemes)
{
YDF_ComponentsHelper.ValidateCustomTheme(CustomThemes);
AdmonitionBlock.CustomThemes = CustomThemes;
}
protected string _theme = AdmonitionBlock.StandardThemes.regular.ToString();
[Microsoft.AspNetCore.Components.Parameter]
public object theme
{
get => this._theme;
set => YDF_ComponentsHelper.
AssignThemeIfItIsValid(value, AdmonitionBlock.CustomThemes, ref this._theme);
}
protected internal static bool mustConsiderThemesCSS_ClassesAsCommon = YDF_ComponentsHelper.areThemesCSS_ClassesCommon;
public static void considerThemesAsCommon()
{
AdmonitionBlock.mustConsiderThemesCSS_ClassesAsCommon = true;
}
[Microsoft.AspNetCore.Components.Parameter]
public bool areThemesCSS_ClassesCommon { get; set; } =
YDF_ComponentsHelper.areThemesCSS_ClassesCommon || AdmonitionBlock.mustConsiderThemesCSS_ClassesAsCommon;
}
Проверка выполняется классом ComponentsHelper (не только для компонента AdmonitionBlock ):
public abstract class ComponentsHelper
{
public static bool areThemesCSS_ClassesCommon = false;
public static void ValidateCustomTheme(Type CustomThemes)
{
if (!CustomThemes.IsEnum)
{
throw new CustomYDF_ThemeIsNotEnumerationException();
}
}
public static void AssignThemeIfItIsValid(object value, Type? customThemes, ref string _theme)
{
if (value is TStandardThemes standardTheme)
{
_theme = $"{ standardTheme }";
return;
}
string stringifiedThemeValue = value.ToString() ?? "";
if (customThemes is not null)
{
Type customThemesType = customThemes;
if (customThemesType.IsEnum && Enum.GetNames(customThemesType).Contains(stringifiedThemeValue))
{
_theme = stringifiedThemeValue;
return;
}
}
throw new InvalidThemeParameterForYDF_ComponentException();
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79302784/why-blazor-component-parameters-should-be-the-auto-properties[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия