The definition that includes it is so broad that it loses all meaning, it would make "private", "class" or "boolean" also annotations.
But I agree about "this" being similar concept
The "this" that GP mentions is for for extension methods similar to the article to be regcognizeed as such (never done if the annotation isn't present), they're written such as:
static int Foo( this Bar bar, int biz) => bar.xyz+biz;
Bar bar = new Bar() { xyz=123; };
int result = bar.Foo(456); // Works even if Foo wasn't a part of Bar initially
Elsewhere annotations(called attributes in C# land) can often be used in the same way as in Java to document serialization behaviour,etc. So in practice there aren't much differences apart from how library authors haven't embraced it entirely as much for automagic bindings (partly due to philosophy, partly due to other facilities being more appropriate).