c# - 使用代码契约来定义不可变接口(interface)?

标签 c# .net code-contracts

我可以使用代码契约在接口(interface)上定义只读、不变的属性吗? IE。实例化后始终产生相同值的属性?

最佳答案

首先注意 .NET 中的术语:

  • 只读:您碰巧拥有的接口(interface)不能用于改变对象或集合
  • 不可变的:没有什么可以改变对象或集合

现在回到你的问题。

在 .NET 代码约定中,所有属性 getter 都隐式标记为“纯”。这意味着从 getter 中读取永远不会有明显的副作用。

从严格意义上讲,如果您有一个只有只读属性的抽象接口(interface),那么整个接口(interface)都被认为是只读的。

但是,听起来您真正想要的是一种将接口(interface)标记为不可变并让底层类继承该状态的方法。不幸的是没有办法做到这一点,抽象接口(interface)只能添加功能。 Code Contracts 所能做的最好的事情就是确保正确添加了功能。

总结

不,它不支持。

关于c# - 使用代码契约来定义不可变接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9137124/

相关文章:

c# - 如何传递抽象方法作为引用?

.net - .NET 的 JavaCC?

.net - CodeContracts 应该取代常规的 ArgumentExceptions 吗?

C# 代码约定 userMessage 参数

c# - 从 ASP.NET MVC 操作中删除样板

c# - 绑定(bind)到数组支持的属性

c# - Visual Studio Web 用户控件事件仅在设计模式下显示?

.net - 我可以强制 MSTest 为每次测试运行使用新进程吗?

.net - WPF 可以/是否有多个 GUI 线程?

c# - 如何为 out 参数指定 Ensures?