C# 如何访问位于不同DLL中的属性

C# 如何访问位于不同DLL中的属性,c#,.net,C#,.net,我在同一个DLL中有一个名为Dynamic和method SetDefaultValues的属性。属性如下所示 public class ManagedProperty: DataModelObject, ISerializable { public bool Dynamic { get { return m_dynamic; } set {

我在同一个DLL中有一个名为Dynamic和method SetDefaultValues的属性。属性如下所示

public class ManagedProperty: DataModelObject, ISerializable 
{

    public bool Dynamic 
    {
        get 
        {
            return m_dynamic;
        }
        set 
        {
            m_dynamic = value;
        }
    }
    private bool m_dynamic = true;
}
方法SetDefaultValues将默认所有值设置为defult。现在我面临的问题是,每当我重新启动窗口服务时,它都会从原始值默认,这是一个bug。所以我想要的条件是,只要动态属性为false,它就不应该出现错误

因此,导致Windows服务中出现问题的代码如下所示。调试器显示动态属性始终为true

                          for (int i = 0; i < allObjects.Count; i++)
                                    {
                                        DataModelObject dmo = (DataModelObject)allObjects.GetAt(i);
                                        dmo.SatisfyGRs(allObjects); // Satisfy all GUID references.
                                        if (dmo is ManagedDevice)
                                        {
                                            ManagedDevice md = (ManagedDevice)dmo;

                                            // Set default values for user defined properties
                                            if (md.SetDefaultValues())
                                            {
                                                SaveObject(md, false);
                                            }
                                            md.CheckThresholds();   // Check thresholds on all properties
                                        }
                                    }
我修改了它,如下所示,但我不知道它工作不正常,并设置为默认值。谁能告诉我这里出了什么问题,或者一切都是正确的,我需要检查其他环境

                          for (int i = 0; i < allObjects.Count; i++)
                                    {
                                        DataModelObject dmo = (DataModelObject)allObjects.GetAt(i);
                                        dmo.SatisfyGRs(allObjects); // Satisfy all GUID references.
                                        if (dmo is ManagedDevice)
                                        {
                                            ManagedDevice md = (ManagedDevice)dmo;
                                            ManagedProperty userprop = new ManagedProperty();
                                            if (userprop.Dynamic == false){
                                            // Set default values for user defined properties
                                            if (md.SetDefaultValues())
                                            {
                                                SaveObject(md, false);
                                            }}
                                            md.CheckThresholds();   // Check thresholds on all properties
                                        }
                                    }

问题是在字段初始值设定项中将m_dynamic设置为true:

private bool m_dynamic = true;
那么您就有了这个代码:

ManagedProperty userprop = new ManagedProperty();
if (userprop.Dynamic == false)

这怎么可能不是真的呢?当您实例化ManagedProperty时,Dynamic每次都是真的。

这些都在内存中,对吗?重新启动服务时,内存中的所有内容都将丢失。如果您想在重启之间保持状态,那么您需要持久化该状态文件、数据库等。。。在重新启动之前,请在重新启动之后加载该状态。@Bob Horn,在重新启动之前没有,我保存了,并且可以在数据库xml中看到值,但是当我重新启动时,所有内容都会被删除。我的deugger没有正确连接,我是如何知道这个问题导致的意思是,当我评论这段代码时,它工作正常。你只是在你的if语句中有一个错误吗?你说过如果它是假的,就不应该默认。那么,您的语句不应该是这样的吗:if userprop.Dynamic!=错误的就目前情况而言,只有当它已经为false时,它才会默认。@Bob Horn这不是问题,我认为是true,但现在我明白了我的Debuger总是显示userprop.Dynamic=true,为什么它总是显示true我不知道可能是property private bool m_Dynamic=true的默认值;它总是显示true,因为您以这种方式初始化它:private bool m_dynamic=true;不,这将不起作用,我需要一个机制来发送动态值当前值到窗口服务