问题标签 [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.

0 投票
18 回答
48498 浏览

c# - C# 3.0 自动属性——有用与否?

注意:这是在我开始使用 C# 时发布的。凭借 2014 年的知识,我可以真正地说自动属性是 C# 语言发生过的最好的事情之一。

我习惯于使用私有和公共字段在 C# 中创建我的属性:

现在,使用.NET 3.0,我们获得了自动属性:

我知道这更像是一个哲学/主观问题,但是除了为每个字段保存五行代码之外,还有什么理由使用这些自动属性?我个人的抱怨是这些属性对我隐藏了一些东西,而且我不是黑魔法的忠实粉丝。

事实上,隐藏的私有字段甚至没有出现在调试器中,考虑到 get/set 函数什么都不做,这是可以的。但是当我想实际实现一些 getter/setter 逻辑时,无论如何我都必须使用 private/public 对。

我看到了节省大量代码(一行对六行)而不会失去稍后更改 getter/setter 逻辑的能力的好处,但是我已经可以通过简单地声明一个公共字段“公共字符串标题”来做到这一点,而无需{ 获取的需要;放; } 块,因此甚至可以节省更多代码。

那么,我在这里缺少什么?为什么有人真的想使用自动属性?

0 投票
23 回答
1091785 浏览

c# - 为 C# 自动属性赋予初始值的最佳方法是什么?

如何为 C# 自动属性赋予初始值?

我要么使用构造函数,要么恢复到旧语法。

使用构造函数:

使用普通属性语法 (带有初始值)

有没有更好的办法?

0 投票
6 回答
4400 浏览

c# - C# 3.0 Auto-Properties - 是否可以添加自定义行为?

我想知道是否有任何方法可以将自定义行为添加到自动属性获取/设置方法中。

我能想到的一个明显案例是希望每个 set 属性方法都调用任何PropertyChanged事件处理程序作为System.ComponentModel.INotifyPropertyChanged实现的一部分。这将允许一个类具有许多可以观察到的属性,其中每个属性都使用自动属性语法定义。

基本上我想知道是否有任何类似于 get/set 模板或 post get/set hook 的类范围。

(我知道可以通过稍微冗长的方式轻松实现相同的最终功能 - 我只是讨厌重复模式)

0 投票
6 回答
4061 浏览

c# - 了解自动实现的属性

我有一个使用自动实现属性的简单类:

我显然在整个班级中都使用了变量 BarName,现在需要在设置属性值时添加逻辑(它必须全部为大写,看图)。这是否意味着我现在需要为 BarName 创建一个私有变量,例如 _BarName,并将整个班级使用的当前 BarName 变量更改为 _BarName?

我试图确保我了解使用自动实现的属性的含义,以及当/如果我需要更改某些内容时它将带来什么。我假设重构(如上所示)不是重大更改,因为属性基本保持不变;只需要在类中做一些工作就可以保持这种状态并添加所需的逻辑。

另一个可能更有意义的例子是,我需要在使用 setter 或 getter 时调用一些方法;更多然后改变价值。

这似乎是对设置属性的代码行和代码行的公平权衡。

0 投票
4 回答
183563 浏览

c# - 初始化 C# 自动属性

我习惯于编写这样的类:

将 Bar 转换为自动属性似乎既方便又简洁,但是如何在不添加构造函数并将初始化放入其中的情况下保留初始化呢?

您可以看到添加构造函数与我应该从自动属性中获得的工作量节省不一致。

这样的事情对我来说更有意义:

0 投票
5 回答
1376 浏览

c# - 正确处理自动属性的 AC# 到 VB.Net 转换实用程序?

我希望这不会被认为是重复的,因为它比类似的问题更尖锐(我很好奇 C# 到 VB.net 转换实用程序的特定弱点)。

我一直在考虑使用像这样的.net 代码转换器之类的工具将类库转换为 VB,因为我是我小组中唯一一个熟悉 C# 的人。我遇到的问题是它没有为自动属性生成正确的 VB。它创建空的 get/set 例程。

所以这:

变成这样:

这里这里链接的工具有类似的问题 - 有些创建有效的属性,但他们不尊重设置例程的访问级别。

附带问题 - 如果您要在 DeveloperFusion 上修复转换器,您会让它返回这样的东西吗?

0 投票
2 回答
1025 浏览

svn - 如何根据新的 SVN 配置重置 svn 属性?

最近我对我的本地 svn 配置文件进行了一些更改。主要是我更正了大约 15 种不同文件类型的 svn:mime-type 属性。现在我需要根据这个新配置重置所有以前签入的文件。SVN 似乎只为 ADDs 和 IMPORTs 触发 auto-prop。那么如何在不单独指定新的 mime 类型的情况下做到这一点呢?

谢谢!

  • dt
0 投票
2 回答
5644 浏览

c# - 为什么必须在结构上调用 :this() 才能在 c# 中使用自动属性?

如果我使用这样的自动属性在 C# 中定义一个结构:

当我尝试构建文件时,我得到一个编译错误,说The 'this' object cannot be used before all of its fields are assigned to. 这可以通过更改构造函数以对默认构造函数进行链式调用来解决,如下所示:

我的问题是,为什么这会起作用,发生了什么?我有一个猜测,我试图通过查看 IL 来证明这一点,但如果我认为我可以分解 IL,那我只是在开玩笑。但我的猜测是,自动属性通过让编译器在幕后为您的属性生成字段来工作。这些字段无法通过代码访问,所有设置和获取都必须通过属性完成。创建结构时,不能显式定义默认构造函数。因此,在幕后,编译器必须生成一个默认构造函数,该构造函数设置开发人员看不到的字段的值。

欢迎任何和所有 IL 向导来证明或反驳我的理论。

0 投票
5 回答
2421 浏览

c# - 为什么自动属性需要 getter 和 setter?

在 C# 中,如果我声明一个自动实现的属性,为什么我必须同时声明 get 和 set 部分?

IE

这不只是语法糖——即编译器为属性插入一个私有字段吗?那么为什么会出现问题呢?

好奇的。

0 投票
9 回答
42398 浏览

c# - C# 自动属性 ​​- 为什么我必须编写“get; set;”?

如果在 C# 自动属性中 get 和 set 都是强制性的,为什么我必须费心指定“get; set;” 有吗?