メタデータで区別できる → リフレクションで区別できる だろ。
Javaでどうやるんだよ?

メソッドの頭に「get、set」がついてたらプロパティだなんて糞アホな仕様だと思わない?
メソッドの頭に「test」がついてたらunit test用メソッドだなんてみっともないと思わない?
クラス名に「<〜>」が入ってたらgenericsクラスだなんて嘲笑激藁な仕様だと思わない?

.NETはリフレクションですべて綺麗に区別出来るんだよ。
そのメリットが分からない奴はセンスがないからプログラマやめた方がいいぞ。