问题标签 [public-fields]

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 投票
4 回答
923 浏览

c++ - 公共提升::信号对象

我把我boost::signal的公开,因为我很懒。

...而不是用Button::OnClicked(boost::function<void()>).

这会回来咬我吗?

0 投票
5 回答
8528 浏览

c# - 为什么公共领域比属性快?

我在 XNA 中四处寻找,发现其中的Vector3类使用公共字段而不是属性。我尝试了一个快速基准测试,发现struct差异非常显着(将两个向量加在一起 ​​1 亿次需要 2.0 秒的属性和 1.4 秒的字段)。对于引用类型,差异似乎并没有那么大,但确实存在。

那为什么呢?我知道一个属性被编译成get_Xset_X方法,这会产生方法调用开销。但是,这些简单的 getter/setter 不总是被 JIT 内联吗?我知道你不能保证 JIT 决定做什么,但肯定这在概率列表中相当高吗?还有什么可以将公共字段与机器级别的属性分开?

我一直想知道的一件事是:自动实现的属性 ( public int Foo { get; set; }) 如何比公共字段“更好”的 OO 设计?或者更好地说:这两者有什么不同?我知道通过反射使它成为一个属性更容易,但还有什么?我敢打赌,这两个问题的答案是一样的。

顺便说一句:我正在使用 .NET 3.5 SP1,我认为它解决了带有结构的方法(或结构的方法我不确定)没有内联的问题,所以不是这样。我想我至少在使用它,它肯定已经安装了,但话又说回来,我使用的是带有 SP1 的 Vista 64 位,它应该有 DX10.1,但我没有 DX10.1 ..

另外:是的,我一直在运行发布版本:)

编辑:我很欣赏快速回答的家伙,但我表示我确实知道属性访问是一个方法调用,但我不知道为什么可能是内联方法比直接字段访问慢。

编辑 2:所以我创建了另一个struct使用显式 GetX() 方法的方法(我怎么不会错过我的 Java 日子),并且无论我是否禁用内联(通过),它[MethodImplAttribute(MethodImplOptions.NoInlining)]执行相同的操作,所以结论:非静态方法显然从不内联,即使在结构上也是如此。

我认为有例外,JIT 可以优化虚拟方法调用。为什么这种情况不会发生在不知道继承的结构上,因此方法调用只能指向一个可能的方法,对吧?还是因为您可以在其上实现接口?

这有点可惜,因为它真的会让我考虑在性能关键的东西上使用属性,但是使用字段让我觉得很脏,我还不如用 C 写我正在做的事情。

编辑 3:我发现这篇帖子是关于完全相同的主题的。他的最终结论是属性调用确实得到了优化。我也可以发誓我已经读过很多次简单的 getter/setter 属性会被内联,尽管callvirt在 IL 中。那我是不是要疯了?

编辑 4:Reed Copsey 在下面的评论中发布了答案:

回复:Edit3 - 查看我更新的评论:我相信这是 x86 JIT 与 x64 JIT 问题。x64 中的 JIT 并不成熟。随着越来越多的 64 位系统每天上线,我希望 MS 能够迅速改进这一点。——里德·科普西

我对他的回答的回应:

谢谢,这就是答案!我尝试强制 x86 构建,所有方法都同样快,而且比 x64 快得多。实际上,这对我来说非常令人震惊,我不知道我在 64 位操作系统上生活在石器时代。我会在我的回答中包含您的评论,这样它会更好。– 朱利安

谢谢大家!

0 投票
3 回答
3255 浏览

c# - 将 C# 公共字段重构为属性的工具

我有很多使用公共字段的 C# 代码,我想将它们转换为属性。

我有 Resharper,它会一一完成,但这需要永远。

有谁知道可以帮助解决此问题的自动重构工具?

0 投票
2 回答
4314 浏览

entity-framework - Dynamic Data with Entity Framework... using [ScaffoldColumn(true)] to show a public property via metadata

... it just doesn't work, at all. I've tried for days, with all different combinations of frick'n stuff and it won't budge.

There are certainly people out there who seem to be blogging about breezing through this sort of thing without seeing a glimpse of an issue saying things like "We all know that you can show public properties of extended EF classes by..." and "If you want to extend your data model to show a calculated field, simply..." - not so simple for me - arghghhhhghhhhhghh!!!

So, as per all of the typical examples, my EF partial class looks like this:

My global.asax looks like this:

And my List.aspx.cs looks like this:

...I'm using a version of Dynamic Data Futures to get functionality like column ordering, better validation, etc, which is working fine. Have made a couple of adjustments to (e.g.) List.aspx.cs (shown above) and have changed the date formatting so as NZ style dates work on my US web-server. Other than that, everything's pretty standard, AFAIK.

My EF Models are housed in a separate assembly and am (obviously) extending some of the Entitys using partial classes. I just want to show two calculated bloody fields, but am having no success at all. I feel like I'm a new programmer bashing my head against a brick wall - none of the old tricks work. Programming shouldn't be this hard :-(

Someone, anyone, please help!!

Bernard.

0 投票
3 回答
22752 浏览

objective-c - How to access @public instance variable from another class in Objective-C?

I know it's possible to define public instance variable with @public keyword. However, Objective-C syntax does not allow accessing other class' variable. What features should I expected from @public Ivar? Or how do I access other class' Ivars?

0 投票
1 回答
227 浏览

public-key - 读取 PGP 密钥信息

如果只有描述而不是实际信息,有人可以显示对 pgp 外观信息的描述吗?类似的东西(我不记得这些值是否正确)

数据包类型[4 位],字节总长度[16 位],数据包版本类型[4 位],创建时间[32 位],加密算法[8 位],...等

我试图理解 rfc4880,但它乏味且令人困惑。到目前为止,我想我已经提取了我上面写的 4,但我似乎无法得到其余的信息。

谁能帮忙?我知道我可以找到一些 pgp 程序,但这样做的重点是让我首先了解这些程序是如何工作的

0 投票
6 回答
595 浏览

oop - 在什么情况下应该使用公共字段而不是属性?

可能重复:
公共数据成员与 Getter、Setter

在什么情况下应该使用公共字段,而不是属性或 getter 和 setter 方法(不支持属性)?究竟在哪里推荐使用它们,为什么,或者,如果不是,为什么仍然允许它们作为语言功能?毕竟,它们打破了允许和鼓励 getter 和 setter 的面向对象的封装原则。

0 投票
2 回答
897 浏览

dump - 有免费的 pgp 密钥转储程序吗?

是否有任何 pgp 密钥转储程序,如http://www.pgpdump.net/也显示 MPI 值以及其他信息?链接网站的程序将为长 MPI 打印出来...,这是完全合乎逻辑的,但我想查看这些值,因为我的程序出于某种原因除了一部分之外都正确(读取 elgamal 公钥),并且它搞乱了一切那是之后。我想看看我在哪里偏离了几位

0 投票
10 回答
26870 浏览

c++ - c++中隐藏特定函数的一种方法

我有一个继承struct A : public B,我想对 B 隐藏个别功能,这可能吗?

using BMethod我知道在 A 声明中使用相反的情况是可能的。

干杯

0 投票
3 回答
24357 浏览

java - Java 次要非公共类使用会产生错误“类型不可见”,即使访问的方法在主类中是公共的

我有一个 Main.java 文件:

如果我尝试从另一个文件访问,如果我只尝试访问 entityManager,它就可以工作:

但是,如果我尝试从 entityManager 访问属性之一(即使是公共的),它也不起作用:

我不明白为什么会这样,有人能给我一些关于这个问题的见解吗?...