.NET 中的 Getter 和 Setter 声明[重复]

2023-12-23

我想知道 getter 和 setter 的声明之间有什么区别,以及是否有首选方法(以及原因)。第一个可以由 Visual Studio 自动生成。其他人呢?谢谢

1st

string _myProperty { get; set; }

2nd

string _myProperty;

public string myProperty
{
    get { return _myProperty; }
    set { _myProperty = value; }
}

3rd

string _myProperty;

public string getMyProperty()
{
  return this._myProperty;
}

public void setMyProperty(string value)
{
  this._myProperty = value;
}

属性用于封装一些数据。您可以使用普通字段:

public string MyField

但该字段可以被您班级的所有外部用户访问。人们可以插入非法值或以您意想不到的方式更改值。

通过使用属性,您可以封装访问数据的方式。 C# 有一个很好的语法将字段转换为属性:

string MyProperty { get; set; }

这被称为自动实现的属性 http://msdn.microsoft.com/en-us/library/bb384054.aspx。当需要时,您可以将您的财产扩展到:

string _myProperty;

public string MyProperty
{
    get { return _myProperty; }
    set { _myProperty = value; }
}

现在您可以添加代码来验证您的值setter:

set
{
    if (string.IsNullOrWhiteSpace(value))
        throw new ArgumentNullException();

    _myProperty = value;
}

属性还可以有不同的 getter 和 setter 访问器:

public string MyProperty { get; private set; }

通过这种方式,您可以创建一个所有人都可以读取但只能由类本身修改的属性。

您还可以为您的应用添加完全自定义的实现getter:

public string MyProperty
{
    get
    {
        return DateTime.Now.Second.ToString();
    }
}

当 C# 编译自动实现的属性时,它会生成中间语言 (IL)。在您的 IL 中您将看到get_MyProperty and set_MyProperty方法。它还创建一个名为的支持字段<MyProperty>k_BackingField(通常这在 C# 中是非法名称,但在 IL 中是有效的。这样您就不会在生成的类型和您自己的代码之间出现任何冲突)。但是,您应该使用 C# 中的官方属性语法。这在 C# 中创造了更好的体验(例如使用 IntelliSense)。

按照惯例,您不应将属性用于需要很长时间的操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET 中的 Getter 和 Setter 声明[重复] 的相关文章

随机推荐

  • FastAPI 作为 Windows 服务

    我正在尝试将 FastAPI 作为 Windows 服务运行 找不到任何文档或任何文章来将 Uvicorn 作为 Windows 服务运行 我也尝试使用 NSSM 但我的 Windows 服务停止了 我设法使用 NSSM 将 FastAPI
  • 如何检查浏览器是否打开

    如何检查浏览器是否打开 我知道我可以检查进程 但有时进程正在运行 但计算机上的浏览器仍在启动 我只需要 Chrome 和 Firefox 两种浏览器 下面的代码获取所有正在运行的进程的文件名 如果 firefox exe 存在于返回哈希集列
  • 分页库 - 无法停止加载项目

    我正在使用分页库直接从网络加载日期 我是否必须实现逻辑来停止获取数据 就我而言 这可能是当收到的项目计数低于页面大小时 目前 当我到达列表末尾时 库会不断加载新页面 理论上 PageKeyedDataSource有一个结果回调 PageKe
  • 在 PHP 中转换日期时“调用非对象上的成员函数 format()”

    我无法摆脱这个错误消息 调用非对象上的成员函数 format 所以 我继续谷歌搜索并找到一些好的来源 例如这个 StackOverflow 问题 https stackoverflow com questions 2167916 conve
  • 如何通过单个查询删除除主键之外的所有索引

    我计划删除除主键之外的所有索引 我自己制作了主键 但所有其他索引都是 SQL Server 的建议 删除所有非主键索引后 计划使用 SQL Server Profiler 调优模板作为数据库调优顾问并创建索引 通过这种方式 计划不要有未使用
  • 计算一个月中的天数

    有没有什么方法可以计算一个月的天数 Yes Const July As Integer 7 Const Feb As Integer 2 daysInJuly gets 31 Dim daysInJuly As Integer System
  • Swift 从 Firebase 数据库获取特定值

    我正在尝试从 Firebase 数据库获取特定值 我查阅了一些文档 比如Google的 但我无法做到 这是数据库的 JSON 文件 Kullan c ahmetozrahat25 E Mail email protected cdn cgi
  • jQuery 中的去抖动函数

    我正在尝试使用 Ben Alman 的 jquery debounce 库对按钮的输入进行去抖动 http benalman com code projects jquery throttle debounce examples debou
  • 如何使用 Sharepoint 服务器作为 Inno 安装文件的源?

    我正在使用 Inno Setup 进行应用程序设置 此应用程序中包含的许多数据文件都存储在 Microsoft Sharepoint 服务器上 当我尝试使用 Sharepoint 在 来源 中提供的路径时 Files Source http
  • 如何在页面加载时从表中加载一定数量的行,并且仅在用户加载更多行时加载它们?

    我有一个使用 DataTables 的表 它包含大量行 因此这会导致页面加载非常缓慢 因为我假设浏览器会等到表格填满后再显示页面 我只想加载表格的一页 10 行 并且仅在用户浏览表格时显示更多数据 显示加载标志也很棒 我研究并听说过一个名为
  • SSRS 2012 在何处以及如何下载

    我需要 SQL Server 2012 的 SSRS 但是我在任何地方都找不到它 有人可以提供帮助并共享链接吗 我在我的机器上找到了一个但它必需的 Sharepoint 我需要它用于学习目的 这样我就没有共享点 谢谢你 您需要拥有三个不同版
  • Python 中 _ 的作用是什么? [复制]

    这个问题在这里已经有答案了 我在某处看到过关于 Python 中使用的字符如下 print 有人可以帮我解释一下它的作用吗 在交互式翻译中 始终指最后输出的值 gt gt gt 1 1 2 gt gt gt print 2 gt gt gt
  • 如何从 IBM Websphere 迁移到 Tomcat?

    我想要将现有的 IBM Websphere 应用程序服务器迁移到等效的 Tomcat 应用程序服务器吗 其次 如何使用 IBM HTTP Server ihs 配置这个迁移后的 Tomcat 应用服务器 简单介绍一下当前的系统 我们正在使用
  • C/C++ 代码的编码和命名约定测试

    我正在寻找一个可以自定义的脚本 工具来检查和强制执行 C C 代码的编码 命名约定 它应该检查例如 代码行以一定长度包裹 私有变量有前缀 代码缩进正确 所有功能均已记录 我正在从事的许多项目都是由客户外包的 这些客户往往有各种内部编码和命名
  • 是否可以在 android 中将动画 gif 文件设置为动态壁纸?

    我是 Android 平台的新手 我希望开发一个动态壁纸应用 当我在搜索引擎中搜索到此内容时 他们中的许多人创建了动态壁纸作为他们的代码 使用SurfaceView and Canvas 我对此了解不多 我的疑问是 任何可以将 gif 图像
  • Bootstrap 4:如何拥有一个包含容器中内容的全宽导航栏(如 SO 导航栏)?

    我正在使用 Bootstrap 4 如何制作像 SO 导航栏一样的导航栏 内容像 容器 一样对齐 但 Bootstrap 4 中 容器流体 的宽度 我想要 固定顶部 导航栏设置的宽度 而不是固定顶部和 容器 中的导航栏内容 我会提供一个示例
  • Python求和地理半径内的纬度/经度点并求和到网格

    基本上 我的实验程序试图找到给定时间落在有效点半径 例如 50 公里 内的点的数量 我的数据是结构化的 但如果需要的话我可以重组 在三个单独的数组中 例如 1 LAT 1 LON 1 TIM 其中 1 LAT 1 LON 1 TIM 均包含
  • 如何让窗体在按退出键时关闭?

    我有一个小窗体 当我按下 Windows 窗体应用程序中的按钮时会出现该窗体 我希望能够通过按退出键关闭表单 我怎么能这样做呢 我不确定要使用的事件 形式 关闭 如果表单上已有关闭表单的按钮 则可以在表单上设置一个属性来为您执行此操作 Se
  • 如何从视觉工作室外部打开WorkItem(VS-Team Explorer)?

    我想使用 C 代码从 Visual Studio 外部打开工作项 是否可以 我尝试过这个 IWorkItemDocument widoc null try string tfsName http rd tfs no2 8080 tfs si
  • .NET 中的 Getter 和 Setter 声明[重复]

    这个问题在这里已经有答案了 我想知道 getter 和 setter 的声明之间有什么区别 以及是否有首选方法 以及原因 第一个可以由 Visual Studio 自动生成 其他人呢 谢谢 1st string myProperty get