小编Phi*_*p C的帖子

在Visual Studio XML文档中使用<value>和<summary>标记的目的

我在VS 2012中使用C#,在我的代码中添加了XML文档,并且我不小心打开了StyleCop规则(特别是SA1609),它"验证了public或protected属性包含带有值标记的文档头".

还有另一条规则(SA1604,此次故意启用),"验证文档标题包含格式正确的摘要标记".

但是,我很难看到你放在摘要标签中尚未包含的值标签中的内容.目前我的摘要标签说的是"获取或设置某些东西".应该在相应的值标签中添加什么来补充它?

(只是为了澄清,我很高兴设置StyleCop - 它只是在我意外打开所有文档规则时引起了我对值标记的注意)

MSDN对这个问题的帮助不大:

  • 值标签的页面似乎意味着你应该详细说明正在使用哪个支持字段(这对于信息隐藏而言似乎是一个坏主意).
  • 他们的XML文档方法说"值标签用于描述属性值 ".我甚至不确定这意味着什么 - 这听起来很像我的摘要.

TL;博士

在XML文档中为属性提供摘要和值标记有什么意义?如何在不重复自己的情况下使用它们?

c# tags xml-documentation

19
推荐指数
1
解决办法
3721
查看次数

为什么泛型类型参数与其他成员之间存在名称冲突

有时候,有一些东西是有用的:

class X {
  ...
}

class Y {
  X X {
    get { ... }
    set { ... }
  }
}
Run Code Online (Sandbox Code Playgroud)

因为X描述了类型是什么(作为类名),以及被访问/变异的值(作为属性名称).到现在为止还挺好.假设您想要做同样的事情,但是以通用的方式:

class Z<T> {
  T T {
    get { ... }
    set { ... }
  }
}
Run Code Online (Sandbox Code Playgroud)

对于此示例,编译器抱怨:The type 'Z<T>' already contains a definition for 'T'.

对于属性,变量和方法会发生这种情况,我不太明白为什么 - 当然编译器知道T是一个类型,因此可以像第一个例子中那样找出它?

简短版:为什么第一个例子有效,但不是第二个?

编辑:我刚刚发现,如果我"重构>重命名"类型参数,例如从T到U,IDE将其更改为:

class Z<U> {
  U T {
    get { ... }
    set { ... }
  }
}
Run Code Online (Sandbox Code Playgroud)

所以那里的东西知道什么是类型,什么是成员名称

c# generics

10
推荐指数
1
解决办法
188
查看次数

为什么SignHash需要知道使用了什么哈希算法?

这可能是http://crypto.stackexchange.com的问题,但我想我先在这里尝试,因为答案可能与.NET有关,而不是加密算法本身.

RSACryptoServiceProvider类中,有一个SignHash方法,它包括:

通过使用私钥加密来计算指定哈希值的签名.

第一个参数是数据的哈希值(看起来很公平),但第二个参数是一个字符串,表明用于创建哈希值的算法.

问题是为什么哈希算法很重要?当然,所有方法需要做的是使用其私钥加密给定值并返回结果?如果它真的需要知道,为什么RSACryptoServiceProvider没有一个方法可以做到这一点(以及适当的验证方法)?

.net cryptography digital-signature

7
推荐指数
1
解决办法
1454
查看次数

当涉及锁定时,代码合同警告"确保未经证实"

我正在尝试lock使用以下示例来研究.NET Code Contracts如何与关键字进行交互:

public class TestClass
{
  private object o1 = new object();
  private object o2 = new object();

  private void Test()
  {
    Contract.Requires(this.o1 != null);
    Contract.Requires(this.o2 != null);
    Contract.Ensures(this.o1 != null);

    lock (this.o2) {
      this.o1 = new object();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

当我运行代码契约静态分析工具时,它会打印一个警告: Ensures unproven: this.o1 != null

如果我做了以下任何一项:

  • 改变o2locko1,
  • o1lock块内部更改为o2,
  • lock块内添加第二行,分配new objecto2
  • 更改lock (this.o2)if (this.o2 != null), …

.net c# code-contracts

7
推荐指数
1
解决办法
250
查看次数

AvalonDock浮动窗口可以设置为不“Always On Top”吗?

与我之前关于使浮动窗口独立于主 DockingManager 的问题相关,这里有一个类似但希望更简单的问题:

AvalonDock 浮动窗口是否可以设置为不位于主 DockingManager 窗口的“Always On Top”?

我正在翻阅AvalonDock 源代码,试图找到一种方法来做到这一点,但我还没有找到任何可行的方法。

理想情况下,我追求的是与 Visual Studio 具有相同效果的东西Tools > Options > Environment > Tabs and Windows > Floating tool windows always stay on top of the main window(至少在 VS2013 和 VS2015 中可用)。

c# wpf avalondock

5
推荐指数
1
解决办法
1292
查看次数

"ISO C++禁止声明'list'没有类型"错误

我在下面的每一行都会遇到以下错误list<string>:

  • ISO C++ forbids declaration of 'list' with no type
  • expected ';' before '<' token

#ifndef __REGNAMEGENERATOR_H
#define __REGNAMEGENERATOR_H

#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <iostream>
#include <sstream>

#define Max_reg_Num 1000

using namespace std;

class RegNameGenerator{
private:
    int intRegNumber;
    int realRegNumber;
    list<string> UsedIntReg; // error
    list<string> UsedRealReg; // error

public:
    RegNameGenerator();
    ~RegNameGenerator();
    string generateIntReg();
    string generateRealReg();
    list <string> getUsedIntReg(); // error
    list <string> getUsedRealReg(); // error
    int getIntRegNum();
    int getRealRegNum();
};

#endif
Run Code Online (Sandbox Code Playgroud)

c++ list

1
推荐指数
1
解决办法
1457
查看次数