2017-10-18 86 views
1

Microsoft MVC doc, related to Authoring Tag Helpers,我可以這樣說的:ASP.MVC中的Getter和Setter可以實例化一個對象嗎?

using System; 

namespace AuthoringTagHelpers.Models 
{ 
    public class WebsiteContext 
    { 
     public Version Version { get; set; } 
     public int CopyrightYear { get; set; } 
     public bool Approved { get; set; } 
     public int TagsToShow { get; set; } 
    } 
} 

這:

using System; 
using AuthoringTagHelpers.Models; 
using Microsoft.AspNetCore.Razor.TagHelpers; 

namespace AuthoringTagHelpers.TagHelpers 
{ 
    public class WebsiteInformationTagHelper : TagHelper 
    { 
     public WebsiteContext Info { get; set; } 

     public override void Process(TagHelperContext context, TagHelperOutput output) 
     { 
     output.TagName = "section"; 
     output.Content.SetHtmlContent(
      [email protected]"<ul><li><strong>Version:</strong> {Info.Version}</li> 
      <li><strong>Copyright Year:</strong> {Info.CopyrightYear}</li> 
      <li><strong>Approved:</strong> {Info.Approved}</li> 
      <li><strong>Number of tags to show:</strong> {Info.TagsToShow}</li></ul>"); 
     output.TagMode = TagMode.StartTagAndEndTag; 
     } 
    } 
} 

我從來沒有見過這樣的代碼之前,這裏公共WebsiteContext信息{獲得;組; }可以自動實例化一個對象?

它是如何工作的?有沒有關於它的文檔?

回答

1

的答案是document you linked

注意

在剃刀標記如下圖所示:

<website-information info="new WebsiteContext { 
           Version = new Version(1, 3), 
           CopyrightYear = 1638, 
           Approved = true, 
           TagsToShow = 131 }" /> 

剃刀知道的信息屬性是一個類,而不是一個字符串,你想要寫C#代碼。任何非字符串標籤助手屬性應該寫入不帶@字符。

標記助手本身並不知道如何實例化實例。您必須在Razor標記中手動執行此操作,或者將其設置爲屬性聲明或類構造函數中的默認值,以使其爲非null。以下是在屬性聲明中設置實例的示例。

public WebsiteContext { get; set; } = new WebSiteContext 
{ 
    Version = new Version(1, 3), 
    CopyrightYear = 1638, 
    Approved = true, 
    TagsToShow = 131 
}; 
0

public WebsiteContext Info { get; set; }在這裏沒有實例化任何東西。如果調用下面的代碼:

var websiteInformationTagHelper = new WebsiteInformationTagHelper();

然後websiteInformationTagHelper.Info將等於null

注意,它現在是在C#中可以分配像比略有不同以下默認值什麼你想知道: public WebsiteContext Info { get; set; } = new WebsiteContext()

-1

不自動,但是。 get和set關鍵字是訪問屬性(get)或分配給(set)後調用的方法的簡寫。您可以添加一個機身採用了常規代碼塊:

get { return _backingField; } 
set { _backingField = value; } 

值關鍵字代表分配給該屬性的值,你可以做這些區塊的大多數事情一樣,同樣的任何方法,包括實例化對象。

微軟的文檔 - 自動實現的屬性:
docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/auto-implemented-properties

如果你指的是實例化父對象,我不相信是有道理的。

相關問題