Getter和Setter in ASP.MVC是否可以实例化一个对象?
Does Getter and Setter in ASP.MVC can instantiate an object?
来自Microsoft MVC doc, related to Authoring Tag Helpers,我可以读到这个:
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(
$@"<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;
}
}
}
我以前从没见过这种代码,where public WebsiteContext Info { get;放; }可以自动实例化一个对象???
它是如何工作的?有相关文档吗?
public WebsiteContext Info { get; set; }
没有在这里实例化任何东西。如果调用以下代码:
var websiteInformationTagHelper = new WebsiteInformationTagHelper();
那么 websiteInformationTagHelper.Info
将等于 null
请注意,现在可以在 c# 中分配默认值,如下所示,这与您想知道的有点不同:
public WebsiteContext Info { get; set; } = new WebsiteContext()
Note
In the Razor markup shown below:
<website-information info="new WebsiteContext {
Version = new Version(1, 3),
CopyrightYear = 1638,
Approved = true,
TagsToShow = 131 }" />
Razor knows the info attribute is a class, not a string, and you want to write C# code. Any non-string tag helper attribute should be written without the @ character.
标签助手本身不知道如何实例化实例。您必须在 Razor 标记中手动执行此操作,或在 属性 声明或 class 构造函数中将其设置为默认值,以使其为非空。这是在 属性 声明中设置实例的示例。
public WebsiteContext { get; set; } = new WebSiteContext
{
Version = new Version(1, 3),
CopyrightYear = 1638,
Approved = true,
TagsToShow = 131
};
不是自动的,但是是的。 get 和 set 关键字是 shorthand,用于在 属性 被访问(get)或分配给(set)之后调用的方法。您可以添加带有常规代码块的正文:
get { return _backingField; }
set { _backingField = value; }
value 关键字表示分配给 属性 的值,您可以在这些块中执行大多数操作,与任何方法一样,包括实例化对象。
Microsoft 文档 - 自动实现的属性:
docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/auto-implemented-properties
如果您指的是实例化父对象,我认为这没有意义。
来自Microsoft MVC doc, related to Authoring Tag Helpers,我可以读到这个:
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(
$@"<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;
}
}
}
我以前从没见过这种代码,where public WebsiteContext Info { get;放; }可以自动实例化一个对象???
它是如何工作的?有相关文档吗?
public WebsiteContext Info { get; set; }
没有在这里实例化任何东西。如果调用以下代码:
var websiteInformationTagHelper = new WebsiteInformationTagHelper();
那么 websiteInformationTagHelper.Info
将等于 null
请注意,现在可以在 c# 中分配默认值,如下所示,这与您想知道的有点不同:
public WebsiteContext Info { get; set; } = new WebsiteContext()
Note
In the Razor markup shown below:
<website-information info="new WebsiteContext {
Version = new Version(1, 3),
CopyrightYear = 1638,
Approved = true,
TagsToShow = 131 }" />
Razor knows the info attribute is a class, not a string, and you want to write C# code. Any non-string tag helper attribute should be written without the @ character.
标签助手本身不知道如何实例化实例。您必须在 Razor 标记中手动执行此操作,或在 属性 声明或 class 构造函数中将其设置为默认值,以使其为非空。这是在 属性 声明中设置实例的示例。
public WebsiteContext { get; set; } = new WebSiteContext
{
Version = new Version(1, 3),
CopyrightYear = 1638,
Approved = true,
TagsToShow = 131
};
不是自动的,但是是的。 get 和 set 关键字是 shorthand,用于在 属性 被访问(get)或分配给(set)之后调用的方法。您可以添加带有常规代码块的正文:
get { return _backingField; }
set { _backingField = value; }
value 关键字表示分配给 属性 的值,您可以在这些块中执行大多数操作,与任何方法一样,包括实例化对象。
Microsoft 文档 - 自动实现的属性:
docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/auto-implemented-properties
如果您指的是实例化父对象,我认为这没有意义。