.Net在编译时将类常量添加到它的命名空间

And*_*dez 1 .net c#

是否有一种很好的方法可以将常量设置为类名称空间的常量?

namespace ACMECompany.ACMEApp.Services
{
    public class MyService
    {
        private const string WhatWeDo = "ACMECompany.ACMEApp.Services";
        private const string WouldBeNice = typeof(MyService).Namespace;

        ...

    }
}
Run Code Online (Sandbox Code Playgroud)

因此,如果该类移动到另一个命名空间,我们不需要担心这些常量.

更多信息 常量仅用于日志记录 - 它传递给某些日志方法.这是所有遗留代码所以不会在短期内发生变化.我知道运行时获取此信息的方法,例如本课题

我们正在使用.NET 4,但很快就会升级到.NET 4.5.

Mat*_*zer 5

您不会使用非常量值设置常量变量.这是可以理解的,不是吗?

顺便说一下,C#有readonly关键字,一旦对象构建时间结束,就会使任何类字段像常量一样工作.它们可以是也可以不是静态的:

public class MyService
{
    static MyService()
    {
         WouldBeNice = typeof(MyService).Namespace;
    }

    private static readonly string WouldBeNice;
}
Run Code Online (Sandbox Code Playgroud)

要么...

public class MyService
{
    private static readonly string WouldBeNice = typeof(MyService).Namespace;
}
Run Code Online (Sandbox Code Playgroud)

此外,您可以使用只读属性实现相同的行为:

// Prior to C# 6...
public class MyService
{
     private static string WouldBeNice { get { return typeof(MyService).Namespace; } }
}

// Now using C# 6...
public class MyService
{
     private static string WouldBeNice => typeof(MyService).Namespace;
}

// Also using C# 6...
public class MyService
{
     // This can be even better, because this sets the namespace 
     // to the auto-generated backing class field created during compile-time
     private static string WouldBeNice { get; } = typeof(MyService).Namespace;
}
Run Code Online (Sandbox Code Playgroud)

  • *您不会设置具有非常量值的常量变量* - 但命名空间在编译时是已知的,因此有某种方法可以做到这一点并非不可想象。 (2认同)