Is it possible to print the class name from within a static function?
e.g ...
public class foo
{
static void printName()
{
// Print the class name e.g. foo
}
}
Is it possible to print the class name from within a static function?
e.g ...
public class foo
{
static void printName()
{
// Print the class name e.g. foo
}
}
You have three options to get the type (and therefore the name) of YourClass that work in a static function:
typeof(YourClass) - fast (0.043 microseconds)
MethodBase.GetCurrentMethod().DeclaringType - slow (2.3 microseconds)
new StackFrame().GetMethod().DeclaringType - slowest (17.2 microseconds)
If using typeof(YourClass) is not desirable, then MethodBase.GetCurrentMethod().DeclaringType is definitely the best option.
Console.WriteLine(new StackFrame().GetMethod().DeclaringType);
While the StackTrace answers are correct, they do have an overhead. If you simply want safety against changing the name, consider typeof(foo).Name. Since static methods can't be virtual, this should usually be fine.
A (cleaner, IMO) alternative (still slow as hell and I would cringe if I saw this in a production code base):
Console.WriteLine(MethodBase.GetCurrentMethod().DeclaringType);
By the way, if you're doing this for logging, some logging frameworks (such as log4net) have the ability built in. And yes, they warn you in the docs that it's a potential performance nightmare.
Since C# 6.0 there exists an even simpler and faster way to get a type name as a string without typing a string literal in your code, using the nameof keyword:
public class Foo
{
static void PrintName()
{
string className = nameof(Foo);
...
}
}
Since static methods cannot be inherited the class name will be known to you when you write the method. Why not just hardcode it?