c# - 在 C# 中获取和设置

标签 c# asp.net

我是 C# 语法的新手。我编写了以下类(我网站主页的代码隐藏):

public partial class MasterPagePro : System.Web.UI.MasterPage
{
    public String pageTitle
    {
        get
        {
            if (this.pageTitle == null)
                return "";
            else
                return " - " + this.pageTitle;
        }
    }

}

但是,当我尝试在 html 中像这样访问 pageTitle 时:

<title>MySite<%=pageTitle%></title>

我收到一个计算器错误。查看代码,很明显问题是该方法递归调用自身,但我不知道该写什么来解决这个问题。我可以做类似的事情:

public partial class MasterPagePro : System.Web.UI.MasterPage
{
    private String _pageTitle

    public String pageTitle
    {
        get
        {
            if (_pageTitle == null)
                return "";
            else
                return " - " + _pageTitle;
        }
        set { _pageTitle = value; }
    }
}

但这似乎完全违背了使用语法快捷方式的意义。执行此操作的正确方法是什么?

最佳答案

在您的第一个示例中,您希望编译器知道您是否真的打算递归调用相同的属性。由于编译器无法知道您的意图,它会按照您所指出的那样创建代码,这会导致计算器溢出。

语法快捷方式适用于当您有一个带有分配/返回 setter/getter 的简单属性时。编译器为您创建支持类成员,并生成 get/set 例程。

例如:

class foo {

 public int myInt;

 public int MyInt { get { return myInt;} 
                    set { myInt = value;} }

 }

对比

 class foo {

 public int MyInt { get; set; }

 }

在这种情况下,所有您尝试执行的操作都不是模棱两可的,因此编译器可以提供帮助并根据需要自动生成。

如果您需要实现自定义 setter/getter 功能,其中还包括设置一个值,您必须使用支持类成员,如您在第二个示例中所示。

关于c# - 在 C# 中获取和设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6862435/

相关文章:

c# - .net Lock - 两个问题

c# - 如何为非托管 c dll 创建一个 c++\cli 包装器

c# - TcpClient.Connected 返回 true 但客户端未连接,我可以使用什么代替?

c# - ServiceStack ResponseFilterAttribute 未被调用

asp.net - Windows Azure : How to 301 non-www url to www for a domain

asp.net - 如何使 ASP.NET Webforms 应用程序可测试?

c# - 您可以在一个项目中混合使用 .net 语言吗?

c# - 如何将 DataGridViewComboBoxColumn 绑定(bind)到返回列表的对象的属性/方法?

javascript - 如何在 AJAX 发布后刷新 _loginPartial.cshtml

c# - 在模型中声明列表