问题标签 [backing-field]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
5281 浏览

c# - 带或不带支持字段的自动属性 ​​- 偏好?

我知道在使用自动属性时,编译器会在屏幕后面创建自己的支持字段。然而,在我阅读学习的许多程序中,我看到人们明确地写

上面和下面有什么区别?

我知道当您在 getter 或 setter 中实际有副作用时使用该属性是显而易见的,但通常情况并非如此。另外,我知道您必须在结构的情况下显式使用支持字段,您不能通过属性访问它们的成员。

我能找到的唯一区别是在定义它的类中调用值的方式不同。然后是简单的偏好,还是通过属性调用值或直接访问场地?简单的约定?

0 投票
1 回答
1989 浏览

c# - How can I get class fields through reflection when backing fields are present?

I have a simple POCO class, e.g.

When I call:

on that class (instance) I can't get the FieldInfo for those members that have automatically generated getters/setters (i.e. int i above).

Actually, I'm trying to read those custom attributes (MyAtrib) and can't do it for those properties that have {get; set;}.

Why is that? I'd expect to get both i and it's (private) backing field, since i is public.

Can I get to i's MyAtrib somehow through reflection?

0 投票
3 回答
4698 浏览

properties - 属性支持字段的标准命名约定是什么?

背景

我想遵循 TypeScript 最常用的命名约定。我注意到官方网站显示了代码示例,其中包含类型和模块的 Pascal-case 以及几乎所有其他内容的 camel-case

例子

我目前正在实现一个封装支持值的属性:

问题

该物业的名称是status。在 C# 中,我通常会命名属性Status和支持值status。由于约定是对属性使用驼峰式大小写,因此这是行不通的。我不确定我应该使用哪种约定来与其他 TypeScript 代码保持一致。

问题

其他语言,如 C# 和 Java,似乎有官方或事实上的标准约定。在 TypeScript 中命名支持字段是否有任何这样的权威或事实上的标准约定?

笔记

对于最接近的选民:请注意,我不是在寻找意见。我正在寻找上述总结问题中要求的客观信息。

0 投票
2 回答
1144 浏览

c# - 引用自动实现属性的支持字段

在 C# 中,自动实现的属性是一件非常方便的事情。然而,尽管它们只是封装了它们的支持字段,但它们仍然不能作为 ref 或 out 参数传递。例如:

在这种特定情况下,我们可以通过以下方式解决问题:

有没有更优雅的方法来使用对 C# 中自动实现属性的支持字段的引用?

0 投票
1 回答
3370 浏览

c# - 二进制格式化程序和带有\不带支持字段的属性

我使用 BinaryFormatter 将以下类序列化到一个文件中:

使用此代码:

使用此代码反序列化时:

我什么都正常。但是,现在我需要该类具有一些支持字段,如下所示:

我的问题是,由于某种原因,以前版本的反序列化不再起作用。我得到了课程,但属性为空。
我不能影响序列化过程或以前的类状态。
如何让文件反序列化为当前类?

0 投票
0 回答
64 浏览

c# - 为什么我需要使用自动属性调用 `struct` 的默认构造函数

这不会编译

但这确实:

这是为什么?

编译时错误是

错误 CS0188:“this”对象在其所有字段都分配给之前无法使用

错误 CS0843:在将控制权返回给调用者之前,必须完全分配自动实现的属性“SO_MMul.Matrix.Columns”的支持字段。考虑从构造函数初始化器调用默认构造函数。

参数化的构造函数不会调用默认构造函数吗?

0 投票
2 回答
1328 浏览

.net - VB.NET 属性声明

我看到我们可以在 VB.NET 中以两种方式定义属性。

如下

或如下一行

是否有任何区别或稍后是定义属性的改进方法。

0 投票
2 回答
1239 浏览

c# - 在 C# 中设置支持字段中的值相乘

我希望set在 C# 的支持字段中乘以一个值(对于 ASP.NET MVC 应用程序)。我这样做是为了避免除法浮点数的问题,因此属性是整数,为了外观需要进行乘法和除法,然后存储为小数。

按照这里的答案,我正在尝试使用支持字段来完成对属性的这些操作,如下所示:

我收到以下警告:

只有 assignment、call、increment、decrement、await 和 new 对象表达式可以用作语句

任何人都可以解释在视图/控制器中不这样做的乘法和除法的正确方法。

0 投票
1 回答
154 浏览

c# - MethodBase 作为哈希表键

我想将派生类中声明的属性的一些支持字段存储在基类中包含的受保护哈希表中。在派生类中使用这种机制必须尽可能简单。

那么,我可以MethodBase.GetCurrentMethod()用来提供有关调用属性的信息(getter - 属性是只读的),因此它可以被识别为唯一可以访问此特定支持字段的属性?

编辑:

基本上,我想实现模式:

看起来像这样:

在基类中

我想这样做的原因是为了简化属性的使用。我使用私有属性来创建一些对象并在类中使用它们。但是当我将它们的支持字段存储在同一个类中时,我对它们的访问权限与对属性的访问权限相同,因此我(意味着将来会创建一些派生类的用户)可能会意外使用支持字段而不是属性,所以我想限制对支持字段的访问,同时允许创建对象并使用它。

我尝试在支持字段上使用 ObsoleteAttribute,如下所示:

但是,首先,我不能强迫用户使用这种模式,其次,在派生类中编写的代码太多,正如我上面提到的,我希望尽可能简单。

0 投票
1 回答
994 浏览

c# - 如何对班级的其他人隐藏支持字段

有什么方法可以强制我的其他班级访问属性设置器而不是支持字段?考虑以下笨拙的代码:

据我所知,C# 没有提供任何机制来防止类开发人员犯此错误。(在这种情况下,自动属性显然不是一种选择。)是否有一种设计模式或实践可以帮助防止这种无意的结束?