The downsides really lie in C# being a managed language, you lose a tonlot of control and protection. For example all of your code will get compiled into RWE memory at runtime which makescomplicates self validation far more difficult. The compiled code itself also relies strongly on the CLR module which provides even further opportunities to reroute your execution. Further, because of it'sits high level, it's trivial to decompile, making RE much simpler. Finally, as an AC, you're going to eventually want a lot ofneed more low level code such as custom assembly blocks for things like manual syscalls or hooking a custom prototype. None of these downsides are completely 'unfixable' (you can use a worker C++native module for what's needed, virtualize important code blocks, etc.) but it makes your job that much harder. ReallyIn the end it just depends on what your goals are, but in the vast majority of casesfor most purposes you're going to lose quite a bitfar better off native for this type of flexibility, control, and security going with a higher level languagejob.