Blazor(Asp-Net)初始化和基本问题



我之前基本上是在玩WPF,刚开始玩Blazor。有人能帮我清除一些基本的";干净代码";了解如何继续的主题。

第一次初始化:我想初始化变量。我该怎么做?从Constructor或OnInitializedSync或OnInitialized或其他方式?

我的意思是在构造函数中:

private IEnumerable<Customer> CustomerList { get; set; }
public Projects()
{
this.CustomerList = List<Customer>();
this.ProjectModel.ProjectStartDate = DateTime.Today;
this.ProjectModel.ProjectEndDate = DateTime.Today;
}

OnInitializedSync或OnInitialized:

private IEnumerable<Customer> CustomerList { get; set; }
protected async override Task OnInitializedAsync()
{
this.CustomerList = List<Customer>();
this.ProjectModel.ProjectStartDate = DateTime.Today;
this.ProjectModel.ProjectEndDate = DateTime.Today;
}

还有另一种方式(不过我个人更喜欢把它们都放在一个地方(:

private IEnumerable<Customer> CustomerList { get; set; } = List<Customer>();

我注意到构造函数的方式不起作用,只有在将它们移动到OnInitializedSync或OnInitialized之后才真正起作用。为什么会这样?


第二:变量。

我可以这样定义:

private string projectManager;
private IEnumerable<Customer> customerList;

这个:

private IEnumerable<Customer> CustomerList { get; set; }
private string ProjectManager { get; set; }

哪一个是正确的?有什么区别?

要回答你的第一个问题,我想说使用3e选项,在我看来,它只是让它更可读。除非从API或存储库获取数据,否则最好在OnInitializedAsync或OnAfterRenderAsync中设置变量。

关于构造函数,据我所知,这只能在使用代码隐藏方法时使用。但是,我不建议使用构造函数,因为这将阻止整个页面或组件的呈现。相反,请使用OnInitializedAsync、OnInitialized、OnAfterRender或OnAfterRenderAsync。这样,在构造函数加载数据或执行逻辑所花费的时间内,用户将不会看到没有正文的空页。

OnInitialized=>当它被渲染时。

OnAfterRender=>当页面完全呈现时。

至于你的第二个问题。请参阅此问题:C#获取设置与无获取设置

属性允许您围绕获取或设置变量进一步封装逻辑,例如添加简单的验证逻辑。例如,如果有人将你的值设置为小于零,你可以抛出异常。您还可以在getter/setter中添加更多的逻辑,例如同步特定字段。

其他一些区别:

在大多数.NET UI框架中,属性可以很容易地用于数据绑定。反射的作用不同。get/set与实例变量的访问级别不同,您可以在只读、私有、受保护、静态等之间进行整体选择。访问属性会产生更多开销。在除游戏和对性能高度敏感的情况之外的大多数用例中,这通常并不重要。

希望这能让事情变得更清楚,并为您提供一个可以找到更多术语的大致方向。

相关内容

  • 没有找到相关文章

最新更新