2014-01-24 54 views
0

我已經在iOS上項目的工作,現在開始使用Windows手機,如何覆蓋C#中的定義值?

iOS中我曾在一個文件夾中複製所有普通類(可以說父母)和鏈接該文件夾在不同的項目,比方說孩子的項目。

在常見的類中我有一個類叫做Constants.m,因爲我已經對所有#define語句表示了一些值大約爲98的語句,我在所有類中都使用它。

而在子項目中,我使用.pch文件,因爲我只定義了項目特定值#define語句讓我們說10個值。

現在,當我運行子項目時,無論我在.pch文件中定義了哪些值,它都會使用Constants.m中的默認值覆蓋該值,因此我將獲取子項目特定的值以及任何值在子項目中定義代碼將從Constants.h中選擇默認值。

我想在Windows手機應用程序開發中使用類似的東西,我可以鏈接的類,但我不能從其他文件#define

How to use #define from another file?

有沒有辦法從我可以覆蓋定義的值?就像iOS一樣。

+4

C#不支持的#define在你使用它的方式在所有。 – jessehouwing

+0

您可以使用靜態常量來定義所述值,但是,#define在c#中的功能與在c/C++中的功能不同([參考](http://msdn.microsoft.com/zh-cn/library/yt3yck0x)。 aspx)) – GMasucci

+0

@GMasucci靜態常量[不能被重載](http://stackoverflow.com/a/770443/43846) - 虛擬屬性看起來是最適合的。 – stuartd

回答

0

在C#中,您不能使用#define來設置全局常量的值。

我的頭頂部,也有父項目具有全局常量和兒童項目覆蓋他們的方法有兩種:

1)使用配置(我的個人偏好)

2)使用虛擬性能(如在評論中提到)

配置在它最簡單的形式看起來像

<configuration> 
<appSettings> 
    <add key="Setting1" value="Value1" /> 
    <add key="Setting2" value="Value2" /> 
</appSettings> 
</configuration> 

,並使用像這樣

string setting1 = ConfigurationSettings.AppSettings["Setting1"]; 

雖然我強烈建議使用custom configuration sections

虛擬財產在最簡單的是

// in parent project 
class ParentValues 
{ 
    public virtual int Key1 
    { 
     get { return 5; } 
    } 

    public virtual int Key2 
    { 
     get { return 10; } 
    } 
} 

// in child project 
class ChildValues : ParentValues 
{ 
    public override int Key2 
    { 
     get 
     { 
      return 12; 
     } 
    } 
} 

,並使用像

// in child project 
class ValueUser 
{ 
    public int GetValue() 
    { 
     ChildValues cv = new ChildValues(); 
     return cv.Key2; 
    } 
}