2009-11-20 109 views
5

我遇到了使用两种符号中的任何一种的例子。我找不到任何关于它的事情,它告诉哪一个是常见的,为什么允许2个符号,以及两者之间是否存在任何细微差别。c#中的[Serializable]和[Serializable()]有区别吗?

任何想法?

+0

好问题..总是自己想。 – 2009-11-20 14:33:40

回答

23

没有,没有功能差异。

为什么2种不同的风格,你问?为简洁起见,允许使用第一种表示法。第二个符号是允许的,因为一些属性取参数:

[Category("Foobar related methods.")] 
public void Foo() 
{ 
} 

还要注意的是[Serializable接口]实际上只是短手[SerializableAttribute()] - C#,您可以省略属性后缀以及空构造括号。

+0

感谢您的快速回答! – Toad 2009-11-20 14:21:51

6

都使用默认c'tor,根本没有任何区别。

9

不,没有区别。 [Serializable]只是[Serializable()]的语法糖,因为如果存在默认的属性构造函数,C#语法可以让您错过构造函数的括号。

请注意,由于属性声明还允许您错过Attribute后缀,因此两者都是[SerializableAttribute()]的语法糖。

+0

感谢您的回答 – Toad 2009-11-20 14:22:27