C# 如何访问位于不同DLL中的属性
我在同一个DLL中有一个名为Dynamic和method SetDefaultValues的属性。属性如下所示C# 如何访问位于不同DLL中的属性,c#,.net,C#,.net,我在同一个DLL中有一个名为Dynamic和method SetDefaultValues的属性。属性如下所示 public class ManagedProperty: DataModelObject, ISerializable { public bool Dynamic { get { return m_dynamic; } set {
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;不,这将不起作用,我需要一个机制来发送动态值当前值到窗口服务