问题标签 [automatic-properties]
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.
c# - JSON的C#自动属性反序列化
我需要将一些以 JSON 表示的 JavaScript 对象反序列化为适当的 C# 类。鉴于自动属性的良好特性,我更愿意将它们放在这些类中,而不是仅仅拥有字段。不幸的是,.NET 序列化引擎(至少在默认情况下)完全忽略了反序列化的自动属性,只关心支持字段,这显然不存在于 JavaScript 对象中。
鉴于没有命名支持字段的标准方法,老实说,我什至不想打扰“让我们创建一个看起来像它具有 C# 支持字段的 JavaScript 对象”方法,因为这听起来有点脏,这是唯一的方法如果我可以强制序列化引擎以某种方式忽略支持字段并直接使用该属性,我可以将 JavaScript 字段序列化为 C# 自动属性。不幸的是,我无法弄清楚这是如何完成的,或者这是否可以完成。任何想法,将不胜感激。
编辑:这是一个例子:
Javascript:
然后将其序列化为“{Name: 'Whiskers'}”。
C# 类:
以及失败的反序列化代码:
从异常中可以明显看出它失败是因为它正在寻找支持字段。
EDIT2:这是例外,如果有帮助(没有内部例外):
System.Runtime.Serialization.SerializationException
“无法反序列化数据协定类型‘Test.Cat’,因为
<Name>k__BackingField, <Breed>k__BackingField
找不到所需的数据成员‘’。”
.net - 如何在 C# 3.0 中自定义自动属性
在 C# 3.0 之前,我们这样做:
现在我们这样做:
(看,没有字段!)现在如果我想自定义 Getter 或 Setter,字段必须像在 C#2.0 中那样显式吗?
c# - 您多久看到一次滥用 C# 速记 getter/setter 的情况?
在 C# 中,您可以以比其他语言更简单的方式创建 getter/setter:
这将创建一个您无法直接寻址的内部私有变量,并使用外部属性“FooBar”直接访问它。
我的问题是 - 你多久看到一次这种滥用?似乎它很有可能经常违反封装最佳实践。不要误会我的意思,我会酌情使用它,并将它的部分变体用于只读只写类型的属性,但是您代码库中其他作者对它的不愉快经历是什么?
澄清:滥用的预期定义确实是在私有变量合适时创建这样的属性。
c# - 这是自动属性的正确语法吗?
我已经编程了很长时间,有时很难跟上语言的变化......
在.net v2之后设置这样的属性真的可以吗
不需要内部字段?似乎编译器最近会处理这个问题?
c# - 规范中是否实现了自动属性?
我可以依赖名为 Foo 的属性的基础字段称为 "k__BackingField" 的事实吗?
c# - 公共字段与自动属性
我们经常被告知我们应该通过为类字段创建 getter 和 setter 方法(C# 中的属性)来保护封装,而不是将字段暴露给外部世界。
但是很多时候,一个字段只是用来保存一个值,不需要任何计算来获取或设置。对于这些,我们都会做这个数字:
好吧,我有一个坦白,我无法忍受写所有这些(真的,它不必写它,它必须看它),所以我流氓并使用公共领域。
然后是 C# 3.0,我看到他们添加了自动属性:
哪个更整洁,我对此表示感谢,但实际上,与仅仅创建一个公共领域有什么不同?
c# - 如何在 C# 自动属性中返回对象的新实例
是否可以使用 C# 自动属性来创建对象的新实例?
在 C# 中,我喜欢如何做到这一点:
是否可以对像 List 这样首先需要实例化的对象执行此操作?
IE:
c#-3.0 - C# 3.0:自动属性 - 编译器创建的私有变量的名称是什么
我在检查 .NET 3.5 的新特性,发现在 C# 3.0 中,我们可以使用
代替
如果我使用自动属性, Name 的私有变量名称是什么?互联网上的教程说编译器会自动创建一个私有变量。那么我如何使用/访问私有变量,如果我想在这个类的方法中使用它?
c# - C# 自动属性
我对 C# 中的自动属性点有点困惑,例如
我知道您通过不必声明私有变量来节省代码,但是当您不使用任何获取或设置逻辑时,属性的意义何在?为什么不直接使用
我不确定这两个语句之间的区别是什么,我一直认为如果你想要额外的 get/set 逻辑,你会使用属性?