There are tons of annotations over the hood.
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).