C is considered a low-level or system programming language. If a C library were a duck, this is what you can do with a duck:
#include <dlfcn.h>
void* library = dlopen("./duck.so", RTLD_LAZY);
typedef void (*duck_t)();
duck_t hello = (duck_t) dlsym(library, "walk");
walk();
Since you could create duck.so in Pascal, C++ or D, they can also be used effectively as system programming languages.
Java nor C# can walk like a duck, not even if that is what it would take to save themselves from drowning. The Go language cannot do this either.
For a language to be considered a valid substitute for C, it must simply be capable of walking like a duck. What other system programming languages are there around? What other languages are capable of walking like a duck?
Andrew Tanenbaum taught us that a computer and its software can be defined as one translating layer sitting on top of another. At the basic level you find the electrical circuits inside the chips. Above that you find microcode which defines assembly language. Above that you find the bios. Above that you find the Operating system and finally above that you find application, userland software.
The problem with .Net languages and Java is that they sit in userland, four steps away "from the metal". So another way to define system software is software that's within 3 layers of abstraction/translation "from the metal". When you have defined system software, you have defined system programming. To summarize: as long as your language can be cleanly translated to basic assembler and can do stack manipulation, ports/interrupt access and memory manipulation, it can be considered a system programming language. Pascal was used in the first implementations of Mac OS and even some versions of BASIC could have that capability like XBASIC (www.xbasic.org) or Freebasic (www.freebasic.net) without loading additional libraries (at least read their manuals before considering the contrary).
One last thing: KILL THAT DUCK. The way you formulate your question borders on trolling.