C++ cli c++;cli ConcurrentDictionary警告4538 当我有这个C++ CLI代码: #pragma managed ref class mcSessions: ConcurrentDictionary <String ^, mcSession^> { //<---- warning here private: static mcSessions ^g_Sessions; TimeSpan MaxIdleTime; mcSessions (TimeSpan newMaxIdleTime); public: static void Initialize (long MaxIdleMinutes); static void Shutdown (); static void CreateSession (String ^&SessionId); static void RunInSession (String ^SessionId, String ^Command); static void RemoveSession (String ^SessionId); };

C++ cli c++;cli ConcurrentDictionary警告4538 当我有这个C++ CLI代码: #pragma managed ref class mcSessions: ConcurrentDictionary <String ^, mcSession^> { //<---- warning here private: static mcSessions ^g_Sessions; TimeSpan MaxIdleTime; mcSessions (TimeSpan newMaxIdleTime); public: static void Initialize (long MaxIdleMinutes); static void Shutdown (); static void CreateSession (String ^&SessionId); static void RunInSession (String ^SessionId, String ^Command); static void RemoveSession (String ^SessionId); };,c++-cli,warnings,concurrentdictionary,C++ Cli,Warnings,Concurrentdictionary,正如@HansPassant在对这个问题的评论中所指出的,他是对的。成员们确实不稳定(愚蠢的我,本可以检查:S)无论如何,这应该是答案。 谢谢,我认为现在已经解决了。 < P> >在回答问题时,他指出:“他是对的。”成员们确实不稳定(愚蠢的我,本可以检查:S)无论如何,这应该是答案。 谢谢,我认为现在已经解决了。 < P >,问题是ConcurrentDictionary的易变成员。但是,从您展示的代码来看,您不需要从ConcurrentDictionary继承 一般来说,我认为如果要创建一个通

正如@HansPassant在对这个问题的评论中所指出的,他是对的。成员们确实不稳定(愚蠢的我,本可以检查:S)无论如何,这应该是答案。
谢谢,我认为现在已经解决了。

< P> >在回答问题时,他指出:“他是对的。”成员们确实不稳定(愚蠢的我,本可以检查:S)无论如何,这应该是答案。
谢谢,我认为现在已经解决了。

< P >,问题是ConcurrentDictionary的易变成员。但是,从您展示的代码来看,您不需要从ConcurrentDictionary继承

一般来说,我认为如果要创建一个通用的、可重用的集合类,只需要从集合类继承。这里的情况似乎不是这样,它似乎非常特定于
mcSession
类,可能有业务逻辑,而不是简单的收集逻辑

如果你像这样声明你的类会有效吗

ref class mcSessions
{
private:
    static ConcurrentDictionary<String^, mcSession^>^ g_Sessions;
    TimeSpan MaxIdleTime;
    mcSessions (TimeSpan newMaxIdleTime);
public:
    static void Initialize (long MaxIdleMinutes);
    static void Shutdown ();
    static void CreateSession (String ^&SessionId);
    static void RunInSession (String ^SessionId, String ^Command);
    static void RemoveSession (String ^SessionId);
};
ref class mcSessions
{
private:
    static mcSessions^ g_Sessions;// static session manager
    ConcurrentDictionary<String^, mcSession^>^ SessionList; // instance variable on g_Sessions
    TimeSpan MaxIdleTime;
    mcSessions (TimeSpan newMaxIdleTime);
public:
    static void Initialize (long MaxIdleMinutes);
    static void Shutdown ();
    static void CreateSession (String ^&SessionId);
    static void RunInSession (String ^SessionId, String ^Command);
    static void RemoveSession (String ^SessionId);
};
ref类mcSessions
{
私人:
静态ConcurrentDictionary^g_会话;
TimeSpan最大空闲时间;
mcSessions(TimeSpan newMaxIdleTime);
公众:
静态void初始化(长MaxIdleMinutes);
静态无效关机();
静态void CreateSession(String^&SessionId);
静态void RunInSession(字符串^SessionId,字符串^Command);
静态void RemoveSession(字符串^SessionId);
};
编辑:还是像这样

ref class mcSessions
{
private:
    static ConcurrentDictionary<String^, mcSession^>^ g_Sessions;
    TimeSpan MaxIdleTime;
    mcSessions (TimeSpan newMaxIdleTime);
public:
    static void Initialize (long MaxIdleMinutes);
    static void Shutdown ();
    static void CreateSession (String ^&SessionId);
    static void RunInSession (String ^SessionId, String ^Command);
    static void RemoveSession (String ^SessionId);
};
ref class mcSessions
{
private:
    static mcSessions^ g_Sessions;// static session manager
    ConcurrentDictionary<String^, mcSession^>^ SessionList; // instance variable on g_Sessions
    TimeSpan MaxIdleTime;
    mcSessions (TimeSpan newMaxIdleTime);
public:
    static void Initialize (long MaxIdleMinutes);
    static void Shutdown ();
    static void CreateSession (String ^&SessionId);
    static void RunInSession (String ^SessionId, String ^Command);
    static void RemoveSession (String ^SessionId);
};
ref类mcSessions
{
私人:
静态mcSessions ^g_Sessions;//静态会话管理器
ConcurrentDictionary^SessionList;//g_会话上的实例变量
TimeSpan最大空闲时间;
mcSessions(TimeSpan newMaxIdleTime);
公众:
静态void初始化(长MaxIdleMinutes);
静态无效关机();
静态void CreateSession(String^&SessionId);
静态void RunInSession(字符串^SessionId,字符串^Command);
静态void RemoveSession(字符串^SessionId);
};

如前所述,问题在于ConcurrentDictionary中的易失性成员。但是,从您展示的代码来看,您不需要从ConcurrentDictionary继承

一般来说,我认为如果要创建一个通用的、可重用的集合类,只需要从集合类继承。这里的情况似乎不是这样,它似乎非常特定于
mcSession
类,可能有业务逻辑,而不是简单的收集逻辑

如果你像这样声明你的类会有效吗

ref class mcSessions
{
private:
    static ConcurrentDictionary<String^, mcSession^>^ g_Sessions;
    TimeSpan MaxIdleTime;
    mcSessions (TimeSpan newMaxIdleTime);
public:
    static void Initialize (long MaxIdleMinutes);
    static void Shutdown ();
    static void CreateSession (String ^&SessionId);
    static void RunInSession (String ^SessionId, String ^Command);
    static void RemoveSession (String ^SessionId);
};
ref class mcSessions
{
private:
    static mcSessions^ g_Sessions;// static session manager
    ConcurrentDictionary<String^, mcSession^>^ SessionList; // instance variable on g_Sessions
    TimeSpan MaxIdleTime;
    mcSessions (TimeSpan newMaxIdleTime);
public:
    static void Initialize (long MaxIdleMinutes);
    static void Shutdown ();
    static void CreateSession (String ^&SessionId);
    static void RunInSession (String ^SessionId, String ^Command);
    static void RemoveSession (String ^SessionId);
};
ref类mcSessions
{
私人:
静态ConcurrentDictionary^g_会话;
TimeSpan最大空闲时间;
mcSessions(TimeSpan newMaxIdleTime);
公众:
静态void初始化(长MaxIdleMinutes);
静态无效关机();
静态void CreateSession(String^&SessionId);
静态void RunInSession(字符串^SessionId,字符串^Command);
静态void RemoveSession(字符串^SessionId);
};
编辑:还是像这样

ref class mcSessions
{
private:
    static ConcurrentDictionary<String^, mcSession^>^ g_Sessions;
    TimeSpan MaxIdleTime;
    mcSessions (TimeSpan newMaxIdleTime);
public:
    static void Initialize (long MaxIdleMinutes);
    static void Shutdown ();
    static void CreateSession (String ^&SessionId);
    static void RunInSession (String ^SessionId, String ^Command);
    static void RemoveSession (String ^SessionId);
};
ref class mcSessions
{
private:
    static mcSessions^ g_Sessions;// static session manager
    ConcurrentDictionary<String^, mcSession^>^ SessionList; // instance variable on g_Sessions
    TimeSpan MaxIdleTime;
    mcSessions (TimeSpan newMaxIdleTime);
public:
    static void Initialize (long MaxIdleMinutes);
    static void Shutdown ();
    static void CreateSession (String ^&SessionId);
    static void RunInSession (String ^SessionId, String ^Command);
    static void RemoveSession (String ^SessionId);
};
ref类mcSessions
{
私人:
静态mcSessions ^g_Sessions;//静态会话管理器
ConcurrentDictionary^SessionList;//g_会话上的实例变量
TimeSpan最大空闲时间;
mcSessions(TimeSpan newMaxIdleTime);
公众:
静态void初始化(长MaxIdleMinutes);
静态无效关机();
静态void CreateSession(String^&SessionId);
静态void RunInSession(字符串^SessionId,字符串^Command);
静态void RemoveSession(字符串^SessionId);
};

请向我们显示准确的错误消息。我刚刚在问题中添加了完整的错误消息。看起来与您链接的情况完全相同,ConcurrentDirectionary的几个成员声明为volatile。如图所示,使用#pragma警告。在VS2012中没有重新编程,此错误似乎已修复。请向我们显示确切的错误消息。我刚刚在问题中添加了完整的错误消息。看起来与您链接的情况完全相同,ConcurrentDirectionary的几个成员声明为易失性。如图所示,使用#pragma警告。在VS2012中没有重新编程,这个bug看起来已经修复了。我理解你的观点。但我这里有一个全局会话管理器。所以我需要一个mcSessions类的实例。用于存储这个实例的静态文件已经放在mcSessions类本身中(它必须在某个类的某个地方,我认为这是一个好地方)。因为它是会话的集合,所以从集合类继承。我有更多的私有属性(和一个由一个定时线程运行的私有函数),在我的例子中,我认为我的设计是正确的。(建议中mcSessions对象存储在哪里?)请参见编辑。对于这种情况,我通常认为mcSessions“有一个”会话列表,而不是“是”会话列表。“有”意味着组成,“是”意味着继承。我为什么要这样做?我的意思是
mcSessions
是一个会话列表。虽然几年前我会同意你的观点,但我认为在做了大量开发之后,从该系列中继承是一个很好的OO。但我想我们会在这一点上继续分歧:)。我确实理解你的观点。但我这里有一个全局会话管理器。所以我需要一个mcSessions类的实例。用于存储这个实例的静态文件已经放在mcSessions类本身中(它必须在某个类的某个地方,我认为这是一个好地方)。因为它是会话的集合,所以从集合类继承。我有更多的私有属性(和一个由一个定时线程运行的私有函数),在我的例子中,我认为我的设计是正确的。(建议中mcSessions对象存储在哪里?)请参见编辑。对于这种情况,我通常认为mcSessions“有一个”会话列表,而不是“是”会话列表。“有”意味着组成,“是”意味着继承。我为什么要这样做?我的意思是
mcSessions
是一个会话列表。虽然几年前我会同意你的观点,但我认为在做了很多工作之后