问题标签 [type-safety]

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 投票
3 回答
471 浏览

wcf - Web 服务和接口兼容性

在 Visual Studio 中添加对 Web 服务(这都是 WCF)的服务引用会生成一些生成的代码,包括正在公开的接口的客户端重述。

我理解为什么会生成这个接口:您可能正在使用 3rd 方服务并且无法访问实际接口。

但是我这样做了,即使透明代理确实确实实现了我想要转换的接口,两者也不是分配兼容的。

我可以使用反射,但这很难看。有什么方法可以打败这种虚假类型安全性并将元数据注入到,以便我可以使用类的接口?


我的具体问题以复杂的方式偏离了规范,这与单个客户端有关,该客户端直接使用基类的某些衍生物并通过服务引用远程使用其他的。每个服务器的基类都需要在集合中保留对订阅客户端的引用,以便枚举通知事件,并且由于使用代理,问题是类型不同的。

这些答案都不能解决我的具体问题,但每一个答案都具有指导意义和帮助。我找到了自己的解决方案(使用双重绑定),但如果您没有从根本上提高我对整个业务的理解,我永远不会想出来。

三个优秀的答案。如何只选择一个?我选择第一个,因为它直接解决了我最初认为的问题。

0 投票
2 回答
10352 浏览

vb.net - VB.NET List(of X).Contains 行为

我有一个自定义类设置为具有两个属性 X 和 Y 的键

我有类似的东西:

我的问题是: List(of T) 上的 .Contains 的行为如何?它是在寻找相同的数据结构,还是仅仅匹配我的密钥的一个属性?

如果可以的话,请提供一个链接,我可以在其中查看有关此的一些文档。

编辑 包含方法类型安全吗?

0 投票
7 回答
10924 浏览

c# - 设计多类型对象的最佳方法

假设我有一个数据对象,但这个对象可以保存几种类型的数据之一。

现在,我想创建一个访问器。获取此数据的某种方式。显然,我可以创建多个访问器:

或者我可以创建多个属性

我不认为这是一个非常好的设计。它要求客户端代码比它应该更关心类型。更重要的是,我真的只需要这个类的一个值,上面将允许同时分配每种类型中的一个。不好。

一种选择是使用泛型。

但是,这不会创建 Foo,它会创建 Foo<T>。每个都有不同的类型,所以我不能真正将它们用作相同的类型。

我可以从 FooBase 派生 Foo<T>,然后将它们全部视为 FooBase,但随后我又回到了访问数据的问题上。

一个不同的泛型选项是使用这样的东西:

当然,问题是任何类型的 T 都可以通过,坦率地说,它有点忙。

我也可以将值装箱并返回一个对象,但是没有类型安全性。

理想情况下,我希望对所有 Foo 都一视同仁,但我希望类型安全,这样如果没有 StringFoo,我什至无法编译对 StringFoo 的引用。

也许这甚至是不可能的......我必须做出一些妥协,但也许我错过了一些东西。

有任何想法吗?

编辑:

好的,正如丹尼尔指出的那样,运行时类型的编译时检查是不切实际的。

在这里做我想做的事情的最佳选择是什么?即,对所有 Foo 都一视同仁,但仍然有一个相对健全的访问机制?

编辑2:

我不想将值转换为不同的类型。我想为该值返回正确的类型。也就是说,如果它是双精度的,我不想返回一个 int。

0 投票
5 回答
3098 浏览

c# - 为什么 C# 编译器会为 GetType() 方法调用发出 callvirt 指令?

我很想知道为什么会这样。请阅读下面的代码示例以及在每个部分下方的注释中发出的相应 IL:

为什么编译器callvirt为第一部分发出 a 而call为第二部分发出 a ?编译器是否有任何理由会callvirt为非虚拟方法发出指令?如果在某些情况下编译器会callvirt为非虚拟方法发出 a ,这是否会给类型安全带来问题?

0 投票
1 回答
2482 浏览

java - MIDP 2 移动应用程序中的 Java 枚举

在使用了 4 年的 .NET 2 和 Java 5 和 6 之后,我刚刚回到 MIDP 开发。在那段时间里,我非常喜欢使用枚举。

枚举是一种语言特性,它允许开发人员对其代码的某些部分更有信心,特别是能够更早地避免或检测错误(在编译期间)。其他一些优点可以在这里找到:http://java.sun.com/j2se/1.5.0/docs/guide/language/enums.html

我发现在 MIDP 2.0 中找不到它们很奇怪。我收到此错误消息:

“类型 'enum' 不应用作标识符,因为它是源级别 1.5 中的保留关键字”

前段时间我有一些使用 Java 1.4 的经验,但我不记得了。你的高级语言的新版本肯定有一些你认为理所当然的特性......

无论如何,这里有一个很好的建议,没有它们怎么办(如果您正在开发 MIDP 或处理 Java 5 之前的代码):http://www.javacamp.org/designPattern/enum.html

总结一下(更多细节和很好的解释,请点击前面的链接。非常感谢原作者):

您对这个问题还有其他不同的方法吗?

0 投票
7 回答
10892 浏览

.net - 什么是类型安全?

我最近参加了一次脑力测验,得到了高分,但有几个问题对我来说很难。也许是因为英语不是我的母语......问题之一是:

以下哪一项描述了类型安全?

  1. 用于确保 CLR 中引用和值类型的安全性的编程构造
  2. 防止因禁止非托管访问而导致的内存泄漏
  3. 特定于 CLR 的功能保证类型不能访问它们自己的 AppDomain 之外的内存
  4. 一种通过使用强名称键来保护程序集及其类型的机制
  5. 处理保证分配的对象总是以兼容的方式访问的概念

我认为是 1 或 5,但它们对我来说听起来很奇怪:(

你怎么看?

0 投票
8 回答
22819 浏览

c# - 如何使数据绑定类型安全并支持重构?

当我希望将控件绑定到我的对象的属性时,我必须提供属性名称作为字符串。这不是很好,因为:

  1. 如果该属性被删除或重命名,那么我不会收到编译器警告。
  2. 如果使用重构工具重命名属性,则很可能不会更新数据绑定。
  3. 如果属性的类型错误,例如将整数绑定到日期选择器,那么直到运行时我才会收到错误消息。

是否有一种设计模式可以解决这个问题,但仍然具有数据绑定的易用性?

(这在 WinForms、ASP.NET 和 WPF 以及可能的其他系统中是一个问题。)

我现在找到了“ C# 中 nameof() 运算符的解决方法:类型安全数据绑定”,它也为解决方案提供了一个很好的起点。

如果您愿意在编译完代码后使用后处理器,那么NotifyPropertyWeaver值得一看。


当绑定是在 XML 而不是 C# 中完成时,有谁知道 WPF 的一个好的解决方案?

0 投票
4 回答
952 浏览

php - 在 PHP 中模拟值类型结构类

有没有办法在 PHP 中模拟结构类?即一个通过值而不是通过引用传递的类,所以它仍然可以被类型提示......

如果是这样,可以使用哪些不同的技术?最好的技术是什么?

如果这是可能的,您显然可以为 PHP 创建一个完全类型安全的层,是否有这样的层?有没有人有这方面的经验?

0 投票
2 回答
20464 浏览

java - Java:类型安全 - 未经检查的强制转换

这是我的代码:

它为 LinkedList 提供以下警告:

为什么它抱怨的是链表而不是 MyGenome?

0 投票
9 回答
15668 浏览

java - 覆盖“等于”方法:如何确定参数的类型?

我正在尝试覆盖equals参数化类的方法。

我怎样才能确保对象的<E>那个other是一样的this