繁体   English   中英

在派生类的构造函数的主体中初始化基类成员变量

[英]Initializing base class member variables in the body of derived class's constructor

我有一个C ++代码,需要将其重写为C#,如下所示:

class dppServerError: public dppBaseError
{
  public :
    dppServerError(DWORD ActionCode, const TCHAR* Desciption)
#ifdef POSTER_VER
        : dppBaseError(Desciption)
#else
        : dppBaseError(TEXT("Server text response: \"%s\""), Desciption)
#endif
        , m_AC(ActionCode), m_ErrorCode(dppERR_SERVER)
    {
    };

问题是我没有在我的C#代码中使用#defines,而是使用了public const Enums 现在,如何在C#中复制以上代码? #ifdefs部分 通常不能在派生类的构造函数的主体中初始化基类的成员变量吗? (不带:语法)。 然后我可以做(在C#中):

   dppServerError(uint ActionCode, string Desciption)
    {
       // Initialize base class member
       if(Globals.ConfigEnum == POSTER_VER)
          dppBaseError  = Desciption; // Can I initialize this base class ivar like this? without : syntax?
       else
         dppBaseError = "Smth else" + Desciption;

        // These are just ivars from This class
        m_AC = ActionCode;
        m_ErrorCode = dppERR_SERVER;

    };

PS。 有人告诉我有关C#中的#defines的信息

“但是请注意:不能保证条件编译符号对于解决方案中的所有项目都是相同的。这将阻止其他希望使用不同条件编译符号的解决方案重用DLL。”

我决定使用枚举,因为我并没有真正理解这意味着什么。 我对.NET有点陌生。

如果dppBaseError是一个字段,则可以按照代码中所示的方式对其进行初始化。

如果它是基类构造函数,则可以执行以下操作:

dppServerError(uint ActionCode, string Desciption)
: base( (Globals.ConfigEnum == POSTER_VER) ? Desciption : "Smth else" + Desciption)
{
    ...

要在c#中获得相同的c ++行为,请使用以下命令:

#if POSTER_VER
     dppBaseError  = Desciption;    
#else
    dppBaseError = "Smth else" + Desciption;
#endif

或者:

dppServerError(uint ActionCode, string Desciption)
#if POSTER_VER
    :base(Desciption)
#else
    :base("Smth else" + Desciption)
#endif 

使用#define POSTER_VER指令,或者更好,在项目属性-> #define POSTER_VER >条件编译符号中定义符号。

通常,源文件仅包含在一个项目中(除非您在Visual Studio中使用“添加为链接”将相同的文件添加到两个或多个项目中),所以“注意”的注释不适用。 如果是这样,请使用与c ++代码相同的方式。

在您的c#代码中, 在运行时评估变量Global.ConfigEnum,在我的c#代码中,就像在您的c ++中一样, 在编译时检查符号POSTER_VER,从而生成了不同的已编译二进制文件。

请参阅MSDN上的#if# define和ProjectProperties

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM