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

时间:2015-09-30 07:57:32

标签: c# .net

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

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

        ...

    }
}

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

更多信息 该常量仅用于日志记录 - 将其传递给某个日志方法。这是所有遗留代码所以不会在短期内发生变化。我知道运行时获取此类信息的方法,例如This Question

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

1 个答案:

答案 0 :(得分:5)

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

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

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

    private static readonly string WouldBeNice;
}

...或

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

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

// 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;
}
相关问题