ASP.MVC中的Getter和Setter可以实例化一个对象吗?
从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信息{获得;组; }可以自动实例化一个对象?
它是如何工作的?有没有关于它的文档?
的答案是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
};
public WebsiteContext Info { get; set; }
在这里没有实例化任何东西。如果调用下面的代码:
var websiteInformationTagHelper = new WebsiteInformationTagHelper();
然后websiteInformationTagHelper.Info
将等于null
注意,它现在是在C#中可以分配像比略有不同以下默认值什么你想知道: public WebsiteContext Info { get; set; } = new WebsiteContext()
不自动,但是。 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
如果你指的是实例化父对象,我不相信是有道理的。