Skip to main content

ThisClass by Trym Lund Flogard

NuGet / site data​

Nuget GitHub last commit GitHub Repo stars

Details​

Info​

info

Name: ThisClass

Exposes class and type information as constants in the ThisClass class using source generators powered by Roslyn, inspired by ThisAssembly.

Author: Trym Lund Flogard

NuGet: https://www.nuget.org/packages/ThisClass/

You can find more details at https://github.com/trympet/ThisClass

Source: https://github.com/trympet/ThisClass

Original Readme​

note

ThisClass

Exposes class and type information as constants in the ThisClass class using source generators powered by Roslyn, inspired by ThisAssembly.

ThisClass​

Add the ThisClassAttribute to generate type information for a class.

[ThisClass]
partial class Demo
{
public Demo()
{
Logger.Info($"Hello from {ThisClass.FullName}"); // SampleApp.Demo
}
}

NLog.Extensions.ThisClass​

Create class loggers without using reflection.

using SomeNamespace;

namespace SampleApp.NLog
{
...
namespace AnotherNamespace
{
using SomeOtherNamespace;
[ClassLoggerLazy]
partial class Demo2<T> : SomeInterface<T> where T : SomeOtherInterface
{
public static void SayHello()
{
Logger.Info("Hello");
}

[ClassLogger]
internal partial class NestedClass : SomeInterface<SomeOtherInterface>
{
}
}
}
}

Looks like this behind the scenes

// <auto-generated/>
#nullable enable
namespace SampleApp.NLog
{
partial class Demo1
{
public static partial class ThisClass
{
/// <summary>
/// Gets the fully qualified name of the parent class, including the namespace but not the assembly.
/// </summary>
public const string FullName = "SampleApp.NLog.Demo1";
}
}
}

// <auto-generated/>
#nullable enable
namespace SampleApp.NLog
{
namespace AnotherNamespace
{
using SomeOtherNamespace;

partial class Demo2<T> : global::SomeNamespace.SomeInterface<T> where T : global::SomeOtherNamespace.SomeOtherInterface
{
public static partial class ThisClass
{
/// <summary>
/// Gets the fully qualified name of the parent class, including the namespace but not the assembly.
/// </summary>
public const string FullName = "SampleApp.NLog.AnotherNamespace.Demo2";
}

private static global::NLog.Logger? __loggerLazy;
private static global::NLog.Logger Logger => __loggerLazy ??= global::NLog.LogManager.GetLogger(ThisClass.FullName);
}
}
}

// <auto-generated/>
#nullable enable
namespace SampleApp.NLog
{
namespace AnotherNamespace
{
using SomeOtherNamespace;

partial class Demo2<T> : global::SomeNamespace.SomeInterface<T> where T : global::SomeOtherNamespace.SomeOtherInterface
{
partial class NestedClass : global::SomeNamespace.SomeInterface<global::SomeOtherNamespace.SomeOtherInterface>
{
public static partial class ThisClass
{
/// <summary>
/// Gets the fully qualified name of the parent class, including the namespace but not the assembly.
/// </summary>
public const string FullName = "SampleApp.NLog.AnotherNamespace.Demo2.NestedClass";
}

private static readonly global::NLog.Logger Logger = global::NLog.LogManager.GetLogger(ThisClass.FullName);
}
}
}
}

About​

note

Generate full class name from class

How to use​

Example (source csproj, source files)​

This is the CSharp Project that references ThisClass

<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="ThisClass" Version="1.5.11" />
</ItemGroup>
<PropertyGroup>
<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
<CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GX</CompilerGeneratedFilesOutputPath>
</PropertyGroup>

</Project>

Generated Files​

Those are taken from $(BaseIntermediateOutputPath)\GX

// <auto-generated/>
#pragma warning disable CS0108, CS1591, CS1573, CS0465, CS0649, CS8019, CS1570, CS1584, CS1658, CS0436, CS8981
#nullable enable
namespace DemoClass;
partial class Person
{
public static partial class ThisClass
{
/// <summary>
/// Gets the fully qualified name of the parent class, including the namespace but not the assembly.
/// </summary>
public const string FullName = "DemoClass.Person";
}
}

Useful​

Download Example (.NET C#)​

Share ThisClass​

https://ignatandrei.github.io/RSCG_Examples/v2/docs/ThisClass

aaa

Category "EnhancementClass" has the following generators:​

1 AOP.Logging.SourceGenerator Nuget GitHub Repo stars 2026-08-30

2 ApparatusAOT Nuget GitHub Repo stars 2023-04-16

3 AspectGenerator Nuget GitHub Repo stars 2024-01-07

4 CommonCodeGenerator Nuget GitHub Repo stars 2024-04-03

5 Comparison Nuget GitHub Repo stars 2025-05-25

6 DudNet Nuget GitHub Repo stars 2023-10-27

7 Enhanced.GetTypes Nuget GitHub Repo stars 2024-09-17

8 FastGenericNew Nuget GitHub Repo stars 2023-08-10

9 Immutype Nuget GitHub Repo stars 2023-08-12

10 Ling.Audit Nuget GitHub Repo stars 2023-12-12

11 Lombok.NET Nuget GitHub Repo stars 2023-04-16

12 M31.FluentAPI Nuget GitHub Repo stars 2023-08-25

13 MemberAccessor Nuget GitHub Repo stars 2025-03-24

14 MemoryPack Nuget GitHub Repo stars 2023-08-04

15 Meziantou.Polyfill Nuget GitHub Repo stars 2023-10-10

16 Microsoft.Extensions.Logging Nuget GitHub Repo stars 2023-04-16

17 Microsoft.Extensions.Options.Generators.OptionsValidatorGenerator Nuget GitHub Repo stars 2023-11-17

18 Microsoft.Interop.JavaScript.JSImportGenerator 2023-04-16

19 NLog.Extensions.ThisClass Nuget GitHub Repo stars 2026-04-03

20 OptionToStringGenerator Nuget GitHub Repo stars 2024-02-15

21 Pekspro.DataAnnotationValuesExtractor Nuget GitHub Repo stars 2026-02-15

22 Program Nuget GitHub Repo stars 2025-11-06

23 QueryStringGenerator Nuget GitHub Repo stars 2024-11-07

24 RSCG_Decorator Nuget GitHub Repo stars 2023-09-30

25 RSCG_UtilityTypes NugetNuget GitHub Repo stars 2023-12-22

26 StaticReflection NugetNuget GitHub Repo stars 2023-10-13

27 SyncMethodGenerator Nuget GitHub Repo stars 2023-08-14

28 System.Runtime.InteropServices Nuget GitHub Repo stars 2023-04-16

29 System.Text.RegularExpressions Nuget GitHub Repo stars 2023-04-16

30 TelemetryLogging Nuget GitHub Repo stars 2023-11-30

31 Tenekon.MethodOverloads.SourceGenerator Nuget GitHub Repo stars 2026-09-05

32 ThisClass Nuget GitHub Repo stars 2024-04-19

33 TrimItEasy Nuget GitHub Repo stars 2026-08-28

See category​

EnhancementClass