Namespace constant in C#

C#NamespacesConstants

C# Problem Overview


Is there any way to define a constant for an entire namespace, rather than just within a class? For example:

namespace MyNamespace
{    
    public const string MY_CONST = "Test";

    static class Program
    {
    }
}

Gives a compile error as follows:

Expected class, delegate, enum, interface, or struct

C# Solutions


Solution 1 - C#

I believe it's not possible. But you can create a Class with only constants.

public static class GlobalVar
{
    public const string MY_CONST = "Test";
}

and then use it like

class Program
{
    static void Main()
    {
        Console.WriteLine(GlobalVar.MY_CONST);
    }
}

Solution 2 - C#

This is not possible

From MSDN:

> The const keyword is used to modify a declaration of a field or local variable.

Since you can only have a field or local variable within a class, this means you cannot have a global const. (i.e namespace const)

Solution 3 - C#

You can use the constants in your other classes if you add the "Using Static" too:

using static MyNameSpace.MyGlobals;

namespace MyNameSpace {
    public static class MyGlobals{
        public const bool SAVE_LOGSPACE = true;
        public static readonly DateTime BACKTEST_START_DATE = new DateTime(2019,03,01);
    }
}

Solution 4 - C#

No, there is not. Put it in a static class or enum.

Solution 5 - C#

I would define a public static class with constants:

namespace Constants
{
    public static class Const
    {
        public const int ConstInt = 420;
    }
}

Inside my Program.cs, i would add the following using:

using static Constants.Const;
using static System.Console;

Now you can freely use the defined constants (which are static by default) and static Console-Methods, e. g.

class Program
{
    static void Main(string[] args)
    {
        WriteLine(ConstInt);
    }
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionPaul MichaelsView Question on Stackoverflow
Solution 1 - C#RvdKView Answer on Stackoverflow
Solution 2 - C#OdedView Answer on Stackoverflow
Solution 3 - C#MrCalicoView Answer on Stackoverflow
Solution 4 - C#Svante SvensonView Answer on Stackoverflow
Solution 5 - C#Halil Ibrahim ÖzcanView Answer on Stackoverflow