在C#中,[Serializable]和[Serializable()]之间有什么区别吗?

9

我遇到了使用两者中任意一种符号的例子。我找不到任何说明哪一个是常用的,为什么允许使用2个符号,并且这两种符号之间是否存在微小差别的内容。

有人有想法吗?


好问题..我自己也一直在想。 - user195488
3个回答

28

没有,两种写法在功能上没有区别。

你问为什么会有这两种不同的写法?第一种写法可以为了简洁。第二种写法之所以存在是因为一些属性需要带参数:

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

还要注意的是,[Serializable] 实际上只是 [SerializableAttribute()] 的简写 - C# 允许省略 Attribute 后缀以及空构造函数的圆括号。


12

不,它们没有区别。[Serializable]只是[Serializable()]的语法糖,因为C#语法允许您省略构造函数括号,如果有一个默认属性构造函数的话。

请注意,两者都是[SerializableAttribute()]的语法糖,因为属性声明也允许您省略Attribute后缀。


我在谷歌上搜索了“[Serializable()] vs [Serializable]”。哇!我得到了答案,这个问题已经等待了十多年。我太喜欢它了。 - YoeyYutch

6

两者都使用默认构造函数,没有任何区别。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接