2012-08-10 25 views
1

我已经使用Style Cop来确保人们遵循之前设定的代码标准,但之后将其配置为符合我们的需求。几天以来,我用Style Cop的默认设置来尝试一下,我对某些事情感到有点困惑。例如,如果我声明一个变量,我真的很想说明它是什么类型。Style Cops默认配置的风格有多常见?

int foo; 

Bar foo = new Bar(); 

风格警察要你使用var关键字很多。 我知道你,编译器和IDE可以通过实例化来确定类型。

var foo = 1; // Makes foo and int 
    var foo = new Bar(); // Makes foo a Bar 

当声明和实例化在一个步骤中完成时,它是相当明显的发生了什么。

还有一些我不太喜欢的东西,Style Cop似乎很喜欢,所以我基本上只是想知道标准Style Cop配置强制的编码风格有多普遍,它起源于哪里?

注意:var以下用法无效,如hvd所述。让我感觉好转一点var;)。我留在,因为它是虽然

原来的问题,但如果你有一些模糊的东西一样

var foo 

    ... bunch of code ... 

    foo = getLatestData(); 

这不是什么明显foo变。但看看foo的声明,你不会变得更聪明。相反,您必须查看getLatestData函数的声明。

我觉得var接近一切。如果您声明fooint,那么没有严格的控制。那么你知道foo总是int。它不依赖于它从中获得的数据。像这样的东西可以给你两种不同类型的foo。

var foo; 

... 

if(status == 0) { 
    foo = getLatestData(); 
} 
else { 
    foo = getOtherData(); 
} 

没有什么强制执行这两个函数必须返还相同种类,因而foo可以成为不同的东西。当你自己编写所有代码时,它可能很容易跟踪。但是,如果它是一个API或插件库,如果外部第三方开发人员感到寒冷决定了foo的类型,那将是一场噩梦,因为在这种情况下您无法确定如何处理它。

+5

'var foo;'无效。 'var'只能用于初始化器,并且只能使用初始化器的类型。 – hvd 2012-08-10 07:07:15

+0

呵呵,这让我感觉更好一些了:) – inquam 2012-08-10 07:09:11

+0

您可以随时自定义Stylecop规则集,实际上您必须这样做(例如很多Stylecop规则与Resharper规则冲突),只要确保此规则集由团队中的所有开发人员。 “然后你知道foo总是和int,它不取决于它得到的是什么数据” - 在我看来这是一件好事 - 如果我改变我的方法返回long而不是int,I将不需要修改使用该方法的代码。 – Giedrius 2012-08-10 07:12:56

回答

0

您的问题有一些关于var的错误观念,这些错误观念已在评论中找到并在链接的MSDN参考资料中加以澄清。

至于实际问题,我会推断默认Style Cop规则集强制实施的代码风格至少与默认Style Cop规则集的用法一样常见。这个答案当然是一个同义反复,但是,对于问题的剩余部分是正确的。

如果您对var关键字有更多的疑虑,可以参考Stack Overflow上关于此主题的许多现有答案。