4 ms·
I just started learning C# while tinkering with Monogame. It's a really nice language to use, I'm quite surprised.
by spicyusername 2y ago
I just started learning C# while tinkering with Monogame.
It's a really nice language to use, I'm quite surprised.
- pjc50 2y agoC# is an absolutely excellent language, and continues to gradually improve. Because I had to check this myself: Monogame is not tied to mono! It claims to support dotnet 8, so it looks suitably current and maintained. It is annoying that Microsoft had their own perfectly adequate game framework which they binned at one of the transitions https://en.wikipedia.org/wiki/Microsoft_XNA https://en.wikipedia.org/wiki/Microsoft_XNA
- ClimaxGravely 2y agomonogame is pretty much the continuation of XNA although they have added more stuff. There is another framework called FNA that I've not used personally but I've heard it tries to match XNA exactly while monogame is a bit more forward looking. So FNA is good for porting forward your older XNA games.
- deleted 2y ago[deleted]
- utensil4778 2y agoC# was my first language so I am biased, but it continues to be my favorite language out of any I've tried.
- doodpants 2y agoAs someone who first learned to program in the early 80's, C# is far from my first language. But it is my favorite as well!
- hoofedear 2y agoC# is really an awesome language, it’s come such a long way. I know it used to be a pain and not very cross-platform friendly, but nowadays it’s a dream. Shoutout to Rider as the best IDE for it lol
- tiptup300 2y agoI've done C# for a while and I really love what can be done with DI & reflection for cool cross cutting abilities. I want to branch out to native stuff like C++ & Rust for memory management stuff, but they don't seem to come close in terms of the reflection abilities or probably the function is there, but just a nightmare to work with. Anybody have any thoughts/opinions?
- jen20 2y agoTake a look at System.Memory; it’s quite possible you don’t need to leave C# to do what you need with memory.
- mhh__ 2y agoThe core is very good, the OOP aspects can be really quite poor. Let me write a function without 50 tokens of boilerplate!
- jayd16 2y agoYou just need to put them in a static class to act as a name space. What is the big deal?
- metaltyphoon 2y agoLove C# but public static implicit operator ClassA(ClassB b) Is very verbose. There are probably worse offenders. C# devs also love to add access modifiers even when its not needed. For example, private for anything that is meant to be private or the suffix `Async` even though you don't have a sync version of a method.
- jayd16 2y agoThe private keyword is needed because the default access is public to the same assembly. Usually that's very different from private. As for the implicit cast, two extra tokens in an uncommon case doesn't seem so bad when you consider all the nice common things like var, the lambda syntax, initializers, pattern matching, LINQ, delegates, etc. etc.
- neonsunset 2y agoDefault visibility for type members is private, default visibility for not-nested types is internal. Defining implicit cast operators frequently (especially ClassA -> ClassB) might be a sign that a better implementation is required. In practice, it's not done often. Agree on unncessary Async suffix. It is a common mistake (it is one) to add it for methods that cannot or will not offer non-async variants.
- metaltyphoon 2y ago
- munchler 2y agoGive F# a try as well if you have some time. It's even better, and can do anything C# can do!