在派生类的构造函数的主体中初始化基类成员变量
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#代码中使用#定义,而是使用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;
};
p。有人告诉我c#
中的#定义"请注意:没有保证条件。解决方案中所有项目的编译符号都是相同的。这是否会阻碍其他解决方案重用您的dll条件编译符号。"
我决定转向枚举,因为我真的不明白这意味着什么。我对。net有点陌生
要在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
指令,或者更好,在项目属性->构建->条件编译符号中定义符号。
通常源文件只包含在一个项目中(除非您在visual studio中使用"add as link"将同一文件添加到两个或多个项目中),因此注释"be aware"不适用。如果有,请使用与c++代码相同的注意事项。
在你的c#代码中,变量Global。ConfigEnum在运行时计算,在我的c#代码中,就像在你的c++中一样,在编译时检查符号POSTER_VER ,导致编译的二进制文件不同。
参见MSDN上的#if, #define和ProjectProperties
如果dppBaseError
是一个字段,您可以像您在代码中所示的那样初始化它。
如果是基类构造函数,可以这样做:
dppServerError(uint ActionCode, string Desciption)
: base( (Globals.ConfigEnum == POSTER_VER) ? Desciption : "Smth else" + Desciption)
{
...
相关文章:
- C++类 - 初始化列表 - 递归 - 按值传递
- 何时为派生类初始化 vptr?
- 虚拟基类初始化
- 类初始化中的静态 lambda
- 如何防止在基类初始化器中调用默认构造函数?
- 如何在派生类中存储基类初始化期间获得的信息
- 是否可以在基类初始化器列表中传递成员对象
- 多重继承、复制构造函数和基类初始化
- 是否将类初始化的常量成员传递给基构造函数
- C++是否要求您从其派生类初始化基类成员
- 如何使用运行时选择基 CTOR 初始化不可复制的基类
- 继承和复制构造函数-如何从基类初始化私有字段
- 在使用虚拟继承时,我可以避免重复的基类初始化吗
- 基类初始化器和成员变量初始化器的顺序重要吗
- 在初始化列表中基类初始化之前调用函数
- 虚拟基类初始化
- 尽管类名与C++完全匹配,但模板基类初始化构造函数失败
- 初始化派生类初始化器列表中的基类成员
- 了解基类初始化
- 关于派生类初始化中的基类