我是 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/