2017-10-18 87 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

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

相关问题