2014-01-24 55 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; 
    } 
}