- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我终于 catch 了添加到 .NET 3.5/4.0 框架中的所有新功能。最近几天我一直在使用 CodeContracts,我真的很努力地喜欢它们。我很好奇其他人如何看待 C# 中的 CodeContracts 实现?具体来说,人们如何组织接口(interface)的契约类、契约不变量的契约方法等?
我喜欢契约(Contract)提供的验证,乍一看它们看起来很棒。通过几行简单的代码,我什至可以在运行代码之前进行一些不错的构建检查。不幸的是,我很难克服在 C# 中实现代码契约的方式的感觉,它们使我的代码变得困惑,而不是记录契约。为了充分利用契约(Contract),我在代码中加入了假设和断言等(我知道有些人会说这是一件好事);但正如我在下面的一些示例中所展示的那样,它将一行简单的代码变成了 4 或 5 行,并且在我看来并没有真正增加替代方法(即断言、异常等)的足够值(value)。
目前,我最大的挫折是:
接口(interface)契约:
[ContractClass(typeof(IInterfaceContract))]
public interface IInterface
{
Object Method(Object arg);
}
[ContractClassFor(typeof(IInterface))]
internal abstract class IInterfaceContract
{
private IInterfaceContract() { }
Object IInterface.Method(Object arg)
{
Contract.Requires(arg != null);
Contract.Ensures(Contract.Result<Object>() != null);
return default(Object);
}
}
这对我来说感觉像是一个障碍,我希望有一种更清晰的方式来记录需求,无论是通过属性还是某种形式的内置语言支持。事实上,我必须实现一个实现我的接口(interface)的抽象类,这样我才能指定契约(Contract),这充其量看起来很乏味。
代码膨胀:
typeof(Action<>).MakeGenericType(typeof(Object);
需要几个假设来验证现成的信息。我很欣赏分析器只知道它在 Type 上运行,因此必须在有限的知识上工作,但仍然让我感到沮丧的是,一行代码需要我重新编写为
var genericAction = typeof(Action<>);
Contract.Assume(genericAction.IsGenericType);
Contract.Assume(genericAction.GetGenericArguments().Length == 1);
genericAction.MakeGenericType(typeof(Object));
只是为了将事情记录在案(是的,我知道我可以使用 ContractVerificationAttribute 为方法/类等关闭此功能,或使用 SuppressMessageAttribbute 来针对特定消息,但这似乎达不到目的,因为您的代码很快就会被压制等等
另外,举个例子
public class MyClass
: IInterface
{
private readonly Object _obj;
public Object Property
{
get
{
Contract.Ensures(Contract.Result<Object>() != null);
return _obj;
}
}
public MyClass(Object obj)
{
Contract.Requires(obj != null);
_obj = obj;
}
}
obj要求不为null,并且设置为只读字段,不可更改,但我仍然需要在我的类中添加一个“标记”方法,以便证明我的属性要求不返回null :
[ContractInvariantMethod]
private void ObjectInvariant()
{
Contract.Invariant(_obj != null);
}
还有更多,但我想我可能已经说得够多了,我真的很感激比我聪明得多的人的洞察力来帮助我“喜欢”代码契约并让这种代码困惑的感觉消失。任何关于如何更好地构建代码、解决不稳定问题等的见解都将不胜感激。
谢谢!
最佳答案
This feels like such a cludge to me, I wish there was a cleaner way to document requirements, either via attributes or some form of built in language support.
CC 团队表示,仅使用属性还不够强大,因为您不能在其中包含诸如 lambda 之类的东西。它们可以包含[NotNull]
之类的东西,但有chosen not to do so因为他们试图让 CC 尽可能通用。
CC 是一个库(而不是扩展 C# 的一部分)的一个原因是它受所有 .NET 语言的支持。
您可以阅读更多关于团队的推理here .
就实际使用而言,到目前为止,我一直将我的接口(interface)契约保存在与接口(interface)相同的文件中,这意味着它们都记录在同一个地方。这是应该改进的地方:)
Code Bloat [...]
您的第二个投诉可能是可以实现的 - 我建议将其发布在 the code contracts forum 上. (编辑:似乎有人 already has ,但还没有答案。)
但是,情况总是不明确的契约(Contract)需要围绕它们进行更多假设。如果您在 .NET 框架中遇到这种情况,您可以请求将契约(Contract)添加到 Missing Contracts on Libraries thread 中。 .
In addition, taking a case like [...]
这has been addressed .如果你有一个自动属性,你只需要添加一个非空不变量,就会生成前置/后置条件:
public class MyClass : IInterface
{
private Object Property { get; set; }
[ContractInvariantMethod]
private void Invariants()
{
Contract.Invariant(Property != null);
}
}
无论如何,您最终可能会得到类的其他不变量,所以这没什么大不了的。
关于c# - 真的很喜欢 C# 中的 CodeContracts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3077933/
假设您有下表,名为 Likes: A|B --- a|b a|f a|e a|i b|a b|i c|d e|p 在此表中,A 中的值表示“喜欢”B 中的人。因此,a 喜欢 b,a 喜欢 f,a 喜欢
请访问此处观看直播https://ibnul.neocities.org/_temporary/au2pr4/like-dis-icon-active-effect.html 这里我有多个评论部分,每
我想要一个喜欢/不喜欢的超链接来在我的页面上显示不同的内容:当点击“喜欢”时,显示“好”;单击“不喜欢”时,显示“不好”。我的代码是这样的: function Homepage(){ t
我们已经建立了一个 Facebook Page Tab application用Like Gate .我们之前已经做过无数次了,在这方面,这个应用程序没有任何异常。 在我们的 ASP.Net 4.0
我正在尝试在我的页面上实现一个喜欢/不喜欢按钮。我设法让按钮工作(点击时它会变成喜欢,反之亦然),它还会在数据库表上创建或删除类似的东西。现在的问题是喜欢的计数器。它仅在我第一次单击按钮时有效,即如果
我想在我的 Android 应用程序中集成一个赞按钮。我用了代码 likeWebView = (WebView) findViewById( R.id.webView1 ); likeWebView
我有一个漫画网站,我希望用户可以为每部漫画和每件艺术品一次投票。 我的代码似乎有两个问题: 1) 我只希望一个用户每张图片投票一次...所以我想捕获他们的信息并将其存储在数据库中。我有一个 ON DU
我正在开发 web 应用程序,我必须像 facebook 那样实现“喜欢”系统。应用程序将包含客户可以“喜欢”的几类产品。所以我开始创建数据库,但遇到了一个障碍。据我了解,有两种方法可以做到这一点:
我需要一个 mysql 查询方面的帮助。我无法找到特定查询的解决方案。我什至不确定,如果 LIKE 运算符是我正在寻找的。 我想要实现的是,找到所有包含 url 的行,如果该 url 不是 foo.c
如何为 Like 编写动态 LINQ 方法条款。 供引用,有Dynamic LINQ OrderBy on IEnumerable / IQueryable .我正在寻找一个类似的动态 Like条款。
This question already has answers here: Cumulative number of unique values in a column up to current
我需要任何用户能够每 24 小时点赞一次 我为此写了一个函数 const LIKE_HEART = 'like_heart'; const LIKE_FINGER = 'like_finger'; p
让我在这里解释一下整个事情,以便您可以清楚地了解情况: 我在 Facebook 上有一个页面,这些见解(页面上的和来自图形 API 的)为我提供了很多有值(value)的信息,但我需要更深入。我正在考
给定这个脚本: DECLARE @token NVARCHAR(max) SET @token = 'mytexttosearchfor' SELECT * FROM myTable WHERE my
我怎样才能做一个Like-query,要搜索多个值? $searchWords = explode(' ', Input::get('search')); 然后我得到一组用于搜索的单词。 我怎样才能通
我正在尝试在页面上制作一个“赞”按钮,但似乎无法使其正常工作。基本上有三个函数使用ajax将数据发送到更新数据库的php页面。我已经检查了数据库并且所有三个更新都正确。如果用户最初不喜欢并单击,它会正
我有两张 table 在“用户”表中,每个用户都有一些技能。它们位于单个列上并连接在一起。在表“技能”上,每个技能都有一个关联的标签。 碰巧有些用户的技能不再在表“技能”中引用。 我想做的选择应该列出
所以我正在尝试设计一个数据库来跟踪观看次数、喜欢次数和下载次数。现在要跟踪的条目数量预计为 1m 或更多,所以通常我会每天跟踪每个条目,但对于 1m,我担心性能甚至可能是硬盘大小。 客户希望能够显示上
我像在 Firebase 事件数据库中一样实现了该系统。点赞计数器位于 EventModel -> likesInfo -> likesNumber 处。问题在于数据发散,例如,如果两个用户快速(0.
假设两个用户正在使用一个应用程序,并已授予该应用程序适当的权限来检索他们的点赞。是否可以使用 FQL 或图形 api 来查找他们的共同点?类似于如何使用图形 API 在两个用户之间找到共同的 frie
我是一名优秀的程序员,十分优秀!