To elaborate a bit more on C#, it's a fine language, but you'll probably experience problems similar to those you'd experience in Java, as C# is not compiled natively until runtime. If you're just writing a Chip8 emulator, C# would be adequate, but when you move on to more advanced emulation, you'll really be missing some of the features a natively compiled executable can offer, along with some handy features like inline assembly. I actually think it would be interesting if someone tried to write a dynarec in .NET for an older system that recompiled to MSIL instead of native code, but I doubt it would be practical. Too many layers of code translation between the actual ROM's code and the processor and emulation speeds will plummet, so C# (or any language that compiles to MSIL) and Java are not really a good choice for sophisticated emulation.