views:

159

answers:

3

Hi,

I've bumped into examples using either of both notations. I can't find anything about it what tells which one is the common one, why 2 notations are allowed, and if there is actually any subtle difference between the two.

anyone an idea?

+6  A: 

both uses the default c'tor, there is no difference at all.

DxCK
+16  A: 

Nope, no functional difference.

Why the 2 different styles, you ask? The first notation is allowed for brevity. The 2nd notation is allowed because some attributes take parameters:

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

Also note that [Serializable] is really just short-hand for [SerializableAttribute()] - C# lets you omit the Attribute suffix as well as the empty constructor parens.

Judah Himango
thanks for the quick answer!
Toad
+8  A: 

No, there is no difference. [Serializable] is just syntactic sugar for [Serializable()] because the C# syntax lets you miss out the constructor brackets if there is a default attribute constructor.

Note that both are really syntactic sugar for [SerializableAttribute()] as attribute declarations also let you miss the Attribute suffix.

Greg Beech
thanks for your answer
Toad