2015-09-30 20 views
1

命名空間是有一個很好的方式來設置一個常量是一個類命名空間?淨集類常量它是在編譯時

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。

+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; 
} 
+1

*你不打算用一個非常量值*設置一個常量變量 - 但是這個名字空間在編譯時是已知的,所以有一些辦法可以做到這一點是不可想象的。 – Rawling

+0

@Rawling命名空間是不知道在編譯的時候,因爲正在使用反射...這是一個運行時的關注訪問它的名字:\ –

+0

@Rawling這可能是類似像'新'nameof'operator namespaceof' ...這將是巨大的,P –

相關問題