gpt4 book ai didi

C# 属性显式设置与覆盖获取

转载 作者:太空宇宙 更新时间:2023-11-03 13:12:46 25 4
gpt4 key购买 nike

简而言之:编写基类属性,我们更喜欢显式 set 方法还是重写 get 方法?

我的页面有一个基类。它实现了几个“特性”;一些实例可能想要禁用该功能,这在设计时是已知的(即它不会改变)。基类如下所示:

public class MyPage : System.Web.UI.Page
{
void Method()
{
if (Feature1)
DoSomething1();
}
}

问题是:以下两种定义 Feature1 属性的方法中哪一种是首选:

// In MyPage class
private bool _feature1 = true;
protected bool Feature1
{
get { return _feature1; }
set { _feature1 = value; }
}

// In Derived page class, somewhere early
Feature1 = false;

对比:

// In MyPage class
protected virtual bool Feature1
{
get { return true; }
}

// In Derived page class
protected override bool Feature1
{
get { return false; }
}

在第一种情况下,属性有一个明确的set供派生Page调用;在第二种情况下,该属性没有 set,而是允许派生 Page 覆盖 get。我们有偏好吗?

这个选择适用于比我的 Pages 更一般的 C# 案例,但它表明我在某些方面受到限制(例如,我没有做 new,我不负责构造函数,...)

最佳答案

根据您的描述,听起来您确实打算将其设为只读字段。

在这种情况下,只定义属性的 get 一半,并在派生类中覆盖它是合适的。

如果有人试图设置它,这还有一个好处,即编译时错误而不是运行时错误。

当然,如果它不是应该是只读的,那么您将需要实现 setter 。

关于C# 属性显式设置与覆盖获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27743891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com