字段和属性有什么区别?

2023-12-06

在 C# 中,字段与属性有何不同,何时应使用字段而不是属性?


属性公开字段。字段应该(几乎总是)对类保持私有,并通过 get 和 set 属性进行访问。属性提供了一定程度的抽象,允许您更改字段,同时不影响使用您的类的事物访问它们的外部方式。

public class MyClass
{
    // this is a field.  It is private to your class and stores the actual data.
    private string _myField;

    // this is a property. When accessed it uses the underlying field,
    // but only exposes the contract, which will not be affected by the underlying field
    public string MyProperty
    {
        get
        {
            return _myField;
        }
        set
        {
            _myField = value;
        }
    }

    // This is an AutoProperty (C# 3.0 and higher) - which is a shorthand syntax
    // used to generate a private field for you
    public int AnotherProperty { get; set; } 
}

@Kent 指出属性不需要封装字段,它们可以对其他字段进行计算,或用于其他目的。

@GSS 指出您还可以执行其他逻辑,例如在访问属性时进行验证,这是另一个有用的功能。

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

字段和属性有什么区别? 的相关文章

  • 在 HKCR 中创建新密钥有效,但不起作用

    我有以下代码 它返回 成功 但使用两种不同的工具使用搜索字符串 3BDAAC43 E734 11D5 93AF 00105A990292 搜索注册表不会产生任何结果 RegistryKey RK Registry ClassesRoot C
  • 尝试了解使用服务打开对话框

    我已经阅读了有关使用 mvvm 模式打开对话框的讨论 我看过几个使用服务的示例 但我不明白所有部分如何组合在一起 我发布这个问题寻求指导 以了解我应该阅读哪些内容 以更好地理解我所缺少的内容 我将在下面发布我所拥有的内容 它确实有效 但从我
  • C# 方法重载决策不选择具体的泛型覆盖

    这个完整的 C 程序说明了这个问题 public abstract class Executor
  • Grpc - 将消息从一个客户端发送到连接到同一服务器的另一个客户端

    是否可以将消息从一个客户端发送到连接到同一服务器的另一个客户端 我想将数据从一个客户端发送到服务器然后发送到特定客户端 我想我需要获取客户端 ID 但我不知道如何获取此 ID 以及如何从服务器将此消息发送到该客户端 我这里有一个样本 这是一
  • 将类对象放置在向量中?

    我注意到我可以将一个类放置在一个向量中 这是我的程序 我收到以下错误 out blackjack exe blackjack obj blackjack obj error LNK2019 unresolved external symbo
  • 循环遍历 C 结构中的元素以提取单个元素的值和数据类型

    我有一个要求 我有一个 C 语言的大结构 由大约 30 多个不同数据类型的不同元素组成 typedef struct type1 element1 type2 element2 type3 element3 type2 element4 1
  • 强制初始化模板类的静态数据成员

    关于模板类的静态数据成员未初始化存在一些问题 不幸的是 这些都没有能够帮助我解决我的具体问题的答案 我有一个模板类 它有一个静态数据成员 必须为特定类型显式实例化 即必须专门化 如果不是这种情况 使用不同的模板函数应该会导致链接器错误 这是
  • 即使没有异步,CallContext.LogicalGetData 也会恢复。为什么?

    我注意到CallContext LogicalSetData LogicalGetData不按照我期望的方式工作 内部设置的值async方法得到恢复即使没有异步或任何类型的线程切换 无论如何 这是一个简单的例子 using System u
  • Eigen 和 OpenMP:由于错误共享和线程开销而没有并行化

    系统规格 Intel Xeon E7 v3 处理器 4 插槽 16 核 插槽 2 线程 核心 Eigen 系列和 C 的使用 以下是代码片段的串行实现 Eigen VectorXd get Row const int j const int
  • 如何将AVFrame转换为glTexImage2D使用的纹理?

    如您所知 AVFrame 有 2 个属性 pFrame gt data pFrame gt linesize 当我从视频 sdcard test mp4 android平台 读取帧后 并将其转换为RGB AVFrame副 img conve
  • 在 .NET MAUI 中实现 TouchTracking

    我一直致力于将我们的应用程序从 Xamarin Forms 迁移到 NET MAUI 我们的应用程序几乎没有绘图功能 用户可以用手指进行绘图 我们用了TouchTrackingXamarin Forms 中的 nuget 包 但与 NET
  • 已发布的 .Net Core 应用程序警告安装 .Net Core,但它已安装

    我制作了一个 WPF 和控制台应用程序 供某人在我无法访问的私人服务器上使用 我使用 Visual Studio 2019 的内置 发布向导 来创建依赖于框架的单文件应用程序 当该人打开 WPF 应用程序时 他们会看到标准警告 他们单击 是
  • 如果输入被重定向则执行操作

    我想知道如果我的输入被重定向 我应该如何在 C 程序中执行操作 例如 假设我有已编译的程序 prog 并且我将输入 input txt 重定向到它 我这样做 prog lt input txt 我如何在代码中检测到这一点 一般来说 您无法判
  • Oauth2中如何同时撤销RefreshToken和使AccessToken失效

    我正在使用 Owin Oauth2 授权和资源服务器相同 开发单页面应用程序 AngularJS Net MVC Json Rest API 的身份验证流程 我选择了 Bearer Token 路由而不是传统的 cookie session
  • Visual Studio 2015:v120 与 v140?

    仅供参考 Win10 x64 我今天开始尝试 Visual Studio 2015 在弄清楚如何运行 C C 部分后 我尝试加载一个大型个人项目 该项目使用非官方的glsdk http glsdk sourceforge net docs
  • 如何解压 msgpack 文件?

    我正在将 msgpack 编码的数据写入文件 在编写时 我只是使用 C API 的 fbuffer 如 我为示例删除了所有错误处理 FILE fp fopen filename ab msgpack packer pk msgpack pa
  • 将 Lambda 表达式树与 IEnumerable 结合使用

    我一直在尝试了解有关使用 Lamba 表达式树的更多信息 因此我创建了一个简单的示例 这是代码 如果作为 C 程序粘贴到 LINQPad 中 它可以工作 void Main IEnumerable
  • 代码中的.net Access Forms身份验证“超时”值

    我正在向我的应用程序添加注销过期警报 并希望从我的代码访问我的 web config 表单身份验证 超时 值 我有什么办法可以做到这一点吗 我认为您可以从 FormsAuthentication 静态类方法中读取它 这比直接读取 web c
  • EntityFramework 6.0.0.0 读取数据,但不插入

    我创建了一个基于服务的数据库 folderName gt Add New Item gt Data gt Service based Database文件到 WPF 应用程序中 然后我用过Database First方法并创建了Person
  • 如何在 C 中将 char 连接到 char* ?

    我怎样才能前置char c to char myChar 我有c值为 A and myChar值为 LL 我怎样才能前置c to myChar使 ALL 这应该有效 include

随机推荐

  • Python中重新赋值会从内存中删除之前的值吗?

    gt gt p 5 gt gt id p 140101523888800 gt gt p 5 56 gt gt id p 140100617985840 我知道将新值分配给现有变量时 它指向内存中存储新值的新位置 但我的问题是 包含先前值的
  • selenium python 中 find_element_by_class_name 的属性是什么?

    browser webdriver Firefox browser get url divs browser find elements by class name class browser find element by class n
  • 使用 C 中的 regex.h 计算匹配数

    我正在使用 POSIX 正则表达式regex h用 C 语言计算英语文本片段中短语出现的次数 但返回值是regexec 只告诉是否找到匹配项 所以我尝试使用nmatch and matchptr找到不同的外观 但是当我打印出匹配项时matc
  • 为什么值类型没有出现默认构造函数?

    下面的代码片段给了我一个类型的构造函数和方法的列表 static void ReflectOnType Type type Console WriteLine type FullName Console WriteLine List
  • 寻找带有复选框的 WPF ComboBox

    我的谷歌技能让我失败了 任何人都听说过 WPF 这样的控件 我试图让它看起来像这样 winforms 屏幕截图 您可以通过设置组合框的 DataTemplate 自行完成此操作 本文向您展示了如何操作 对于列表框 但原理是相同的 另一篇文章
  • JQuery UI Accordion 无法处理 AJAX 加载的内容

    我正在尝试动态加载产品信息页面 该页面有一个手风琴菜单供用户浏览 单击按钮后 我使用 AJAX 动态引入手风琴的内容 手风琴的 HTML 以其应有的方式显示 但手风琴 方法 未执行以将内容修改为手风琴 Imports
  • 控制到达非 void 函数的末尾

    以下代码片段在编译时会生成一些警告消息 Cluster Myclass getCluster const Point p foreach Cluster c this foreach Point point c if point p ret
  • 使用 EclipseLink JPA 将 XML 类型存储到 PostgreSQL

    我是 JPA 新手 我有一个关于如何使用 JPA 将 XML 类型存储到 PostgreSQL 的问题 我只是扩展现有的 POJO 以将附加的 XML 字段保留到列中 POJO 看起来像这样 我故意省略了一堆其他列以使其更短 在添加这个额外
  • 用图像替换 x 轴刻度标签

    我正在绘制一个散点图 展示所有 NFL 球队的防守 我想在底部轴上显示他们的图像 而不是纯文本中的他们的名字 可以这样做吗 这是我能想到的代码片段 fig px scatter df x defensiveTeam y passResult
  • 使用 Lambda 或 LINQ 将一个类实例转换或映射到另一个类实例的列表?

    我有以下两个课程 class MyData public List
  • 打印出 ASCII 圆和轴

    该程序在笛卡尔平面上打印一个圆 输入是 半径 圆心坐标 cx cy 以及我们要用来打印圆的字符 如果圆上的点与轴重叠 则该点优先 我在方法中编写了打印轴的条件drawCircle 但是图像扭曲了 有些事情让我困惑 有人可以帮助我找出我的错误
  • '导入 x' 与“'从 x 导入 y' 和 '导入 x.y' ”

    我试过 from urllib import request mine request Request and import urllib request mine urllib request Request 他们都工作得很好 但 imp
  • 在logstash字段中包含单调递增的值?

    我知道通过 Logstash 处理文件时没有内置的 行计数 功能 出于各种可理解和记录的原因 但是 在任何给定的 Logstash 实例中应该有一种机制 为每个解析的行提供一个单调递增的变量 计数 我不想采用指标路线 因为它是一种连续轮询机
  • 我应该如何在C中使用Sqlite“PRAGMAintegrity_check”

    我的数据库已损坏 在命令行中我输入 PRAGMA integrity check 和 sqlite 返回 On tree page 441 cell 17 Rowid 205 out of order min less than paren
  • 如何更改我的 wsdl 的地址位置

    我的 wsdl 在地址位置放置了错误的域 如何修复
  • 如何使用 ScriptCam 插件将文件保存在我的服务器中

    我希望我的网站的用户能够在网站中流式传输视频并进行预览 然后他们可以单击 保存 文件将保存在网站的服务器中 我找到了这个plugin 它似乎工作正常 但问题是 在进行文件转换后 它给了我一个下载文件的链接 而该文件应该保存在 ScriptC
  • 在 Ember-CLI 项目中编译 Compass

    我正在使用 ember cli v0 0 23 并且正在尝试获取西兰花指南针包与我的项目一起使用 但我遇到了一些问题 首先 在我的Brocfile 我已经替换了标准 Ember CLI 蓝图 版本 var styles preprocess
  • 我可以将 Promise 传递给 jQuery.when(),还是只传递 Deferreds?

    The 文档jQuery when 表示该函数采用 Deferreds 然而 它后来也说 如果将单个参数传递给 jQuery when 并且它不是 Deferred 或 Promise 这似乎意味着它也可以接受 Promise 但 Prom
  • 如何使用 Java Gson 库转换动态 JSON 响应

    我有一个可以返回 JSON 数组或对象的 API JSON 对象示例 id 1 name name JSON 数组 id 1 name name id 1 name name 将 JSON 对象响应映射到 POJO 时 我使用 MyEnti
  • 字段和属性有什么区别?

    在 C 中 字段与属性有何不同 何时应使用字段而不是属性 属性公开字段 字段应该 几乎总是 对类保持私有 并通过 get 和 set 属性进行访问 属性提供了一定程度的抽象 允许您更改字段 同时不影响使用您的类的事物访问它们的外部方式 pu