You have absolutely no clue what you're talking about, mate. .NET is like Java. It's behind critical systems you haven't heard of because they're not flashy or glamorous, so you have no idea how prevalent they actually are.
The other posters are right. Most .NET projects today are backends, where it's used similarly to how Java is used.
For what it's worth, pyright highlights the problem in your first example:
t.py:11:20 - error: Argument of type "Self@C" cannot be assigned to parameter "self" of type "B" in function "__init__"
"C*" is not assignable to "B" (reportArgumentType)
1 error, 0 warnings, 0 information
ty and pyrefly give similar results. Unfortunately, mypy doesn't see a problem by default; you need to enable strict mode.
In Python, they're very easy to use. Define your schema with Pydantic and pass the class to your client calls. There are some details to know (eg field order can affect performance), but it's very easy overall. Other languages probably have something similar.
reply