[英]What does this C# code do?
public class AccountMembershipService : IMembershipService
{
private readonly MembershipProvider _provider;
public AccountMembershipService()
: this(null)
{
}
我從MVC3項目自動創建的AccountModels.cs類中獲取了這段代碼。
您能解釋一下“ this(null)”位在做什么嗎?
您的類中最有可能是另一個構造函數,如下所示:
public AccountMembershipService(MembershipProvider provider)
{
_provider = provider;
}
您的代碼首先調用此構造函數,並將null
作為provider
的參數傳遞,然后執行原始的構造函數。
它使用null
參數調用其他構造函數。
上面的答案正在回答所問的問題,但要進一步說明:
這是我們用於控制反轉和使單元測試成為可能的一種技術。
這都是構造函數
public AccountMembershipService()
: this(null)
{
}
public AccountMembershipService(MembershipProvider provider)
{
_provider = provider ?? Membership.Provider;
}
具有:this(null)的第一個構造函數調用您的第二個構造函數,將null傳遞給參數提供程序。
這樣做的原因之一是避免邏輯重復。 假設您做了:
public AccountMembershipService()
{
_provider = Membership.Provider;
}
public AccountMembershipService(MembershipProvider provider)
{
_provider = provider;
}
雖然完全合理,但是如果您更改_provider的名稱,或者添加其他初始化代碼,則必須在2個地方進行修改。 通過調用:this(null),現在您所有的工作都只發生在一個地方。
我們有2個構造函數的原因是,通過調用默認構造函數,將使用靜態實例Membership.Provider。 不幸的是,很難進行單元測試,因為現在我們依賴於成員資格提供者,數據庫,具有有效數據等。
相反,通過創建第二個構造函數,我們現在可以傳遞一個模擬MembershipProvider。 但是,這是一個完全不同的主題,因此,如果您對它的工作方式感興趣,請隨時問另一個問題。
它在您的類中調用另一個構造函數,並傳遞null
作為參數。
您還可以編寫: base(...)
在基類中顯式調用構造函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.