[英]how to access the value of the member variables of a base class from a derived class
[英]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.