deltanovember
deltanovember

Reputation: 44071

C# getting its own class name

If I have a class called MyProgram, is there a way of retrieving "MyProgram" as a string?

Upvotes: 711

Views: 640127

Answers (11)

Display name
Display name

Reputation: 1552

The easiest way is to use the call name attribute. However, currently, there is no attribute class that returns the class name or the namespace of the calling method.

See the documentation for CallerMemberNameAttribute

public void DoProcessing()
{
    TraceMessage("Something happened.");
}

public void TraceMessage(string message,
        [System.Runtime.CompilerServices.CallerMemberName] string memberName = "",
        [System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "",
        [System.Runtime.CompilerServices.CallerLineNumber] int sourceLineNumber = 0)
{
    System.Diagnostics.Trace.WriteLine("message: " + message);
    System.Diagnostics.Trace.WriteLine("member name: " + memberName);
    System.Diagnostics.Trace.WriteLine("source file path: " + sourceFilePath);
    System.Diagnostics.Trace.WriteLine("source line number: " + sourceLineNumber);
}

// Sample Output:
//  message: Something happened.
//  member name: DoProcessing
//  source file path: c:\Users\username\Documents\Visual Studio 2012\Projects\CallerInfoCS\CallerInfoCS\Form1.cs
//  source line number: 31

Upvotes: 2

Mikael Engver
Mikael Engver

Reputation: 4768

this can be omitted. All you need to get the current class name is:

var className = GetType().Name

Upvotes: 11

Ifeoluwa Osungade
Ifeoluwa Osungade

Reputation: 305

This can be used for a generic class

typeof(T).Name

Upvotes: 4

ChaosPandion
ChaosPandion

Reputation: 78282

I wanted to throw this up for good measure. I think the way @micahtan posted is preferred.

typeof(MyProgram).Name

Upvotes: 312

Cyanfish
Cyanfish

Reputation: 4153

With C# 6.0, you can use the nameof operator:

nameof(MyProgram)

Upvotes: 292

Harshal Doshi  Jain
Harshal Doshi Jain

Reputation: 2597

Use this

Let say Application Test.exe is running and function is foo() in form1 [basically it is class form1], then above code will generate below response.

string s1 = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name;

This will return .

s1 = "TEST.form1"

for function name:

string s1 = System.Reflection.MethodBase.GetCurrentMethod().Name;

will return

s1 = foo 

Note if you want to use this in exception use :

catch (Exception ex)
{

    MessageBox.Show(ex.StackTrace );

}

Upvotes: 11

Abbas ali
Abbas ali

Reputation: 29

Get Current class name of Asp.net

string CurrentClass = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name.ToString();

Upvotes: 2

Thomas Levesque
Thomas Levesque

Reputation: 292625

Although micahtan's answer is good, it won't work in a static method. If you want to retrieve the name of the current type, this one should work everywhere:

string className = MethodBase.GetCurrentMethod().DeclaringType.Name;

Upvotes: 150

bafsar
bafsar

Reputation: 1108

If you need this in derived classes, you can put that code in the base class:

protected string GetThisClassName() { return this.GetType().Name; }

Then, you can reach the name in the derived class. Returns derived class name. Of course, when using the new keyword "nameof", there will be no need like this variety acts.

Besides you can define this:

public static class Extension
{
    public static string NameOf(this object o)
    {
        return o.GetType().Name;
    }
}

And then use like this:

public class MyProgram
{
    string thisClassName;

    public MyProgram()
    {
        this.thisClassName = this.NameOf();
    }
}

Upvotes: 21

mikeschuld
mikeschuld

Reputation: 963

For reference, if you have a type that inherits from another you can also use

this.GetType().BaseType.Name

Upvotes: 17

micahtan
micahtan

Reputation: 19190

Try this:

this.GetType().Name

Upvotes: 1094

Related Questions