我之前基本上是在玩 WPF,剛剛開始使用 Blazor。有人可以幫我清除一些基本的“干凈代碼”主題以了解如何繼續。
第一次初始化:我想初始化變數。我應該怎么做?從建構式或 OnInitializedAsync 或 OnInitialized 或其他方式?
我的意思是在建構式中:
private IEnumerable<Customer> CustomerList { get; set; }
public Projects()
{
this.CustomerList = List<Customer>();
this.ProjectModel.ProjectStartDate = DateTime.Today;
this.ProjectModel.ProjectEndDate = DateTime.Today;
}
OnInitializedAsync 或 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>();
我注意到構造方法不起作用,只有在將它們移動到 OnInitializedAsync 或 OnInitialized 之后才能真正起作用。為什么這樣?
第二:變數。
我可以這樣定義:
private string projectManager;
private IEnumerable<Customer> customerList;
還有這個:
private IEnumerable<Customer> CustomerList { get; set; }
private string ProjectManager { get; set; }
哪一個是正確的?有什么區別?
uj5u.com熱心網友回復:
要回答您的第一個問題,我會說使用 3e 選項,我認為它只會使其更具可讀性。除非您從 API 或存盤庫中獲取資料,否則最好在 OnInitializedAsync 或 OnAfterRenderAsync 中設定變數。
關于建構式,據我所知,這只能在使用代碼隱藏方法時使用。但是,我不建議使用建構式,因為這會阻止整個頁面或組件呈現。相反,請使用 OnInitializedAsync、OnInitialized、OnAfterRender 或 OnAfterRenderAsync。這樣,在建構式加載資料或執行邏輯所需的時間內,用戶將不會看到沒有正文的空頁面。
OnInitialized => 渲染時。
OnAfterRender => 當頁面完全渲染時。
至于你的第二個問題。看到這個問題:C# Get Set vs without Get Set
屬性允許您進一步封裝有關獲取或設定變數的邏輯,例如添加簡單的驗證邏輯。例如,如果有人將您的值設定為小于零,您可能會拋出例外。您還可以在 getter/setter 中添加更多邏輯,例如同步特定欄位。
其他一些區別:
在大多數 .NET UI 框架中,屬性可以很容易地用于資料系結。反射的作業方式不同。get/set 與例如您的實體變數的不同訪問級別,您可以在只讀、私有、受保護、靜態等之間進行選擇。訪問屬性的開銷更大。除了游戲和高性能敏感情況之外,這在大多數用例中通常并不重要。
希望這能讓事情變得更清楚一些,并為您提供一個大致的方向,了解您可以找到更多的術語。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/407841.html
標籤:
