gpt4 book ai didi

c# - 从一个公共(public)类调用静态参数到另一个公共(public)类

转载 作者:太空狗 更新时间:2023-10-30 01:35:57 25 4
gpt4 key购买 nike

我正在尝试编写一个多线程应用程序,我需要使用 Monitoer.Enter/Exit/Wait/Pulse我已经创建了一个 Lock 对象并像那样在它自己的类中使用它

public partial class domain 
/*I dont sure this is the good practice way to mange DDD Layers (if anybody have a comment about it)*/
{

Public class Peer2PeerCom
{
public static readonly object locker = new object();
//other stuff here
//...
//somwhere here
Monitor.Pulse(locker);
}
}

在其他类(class)我想要/需要像那样使用储物柜

public class Control
{
public domain.Peer2PeerCom Dom_P2PCom = new domain.Peer2PeerCom();
internal void connection ( int port , string IpAdress)
{
Monitor.Enter(Dom_P2PCom.locker);
//do stuff here
Monitor.wait(Dom_P2PCom.locker);
//..
Monitor.Exit(Dom_P2PCom.locker);
}
}

但是当我尝试时我无法识别 locker ,我认为这是因为它是 static 但我不明白如何在不使整个类静态的情况下更正它

最佳答案

您正在尝试通过引用访问一个静态 成员。幸运的是,这在 C# 中不起作用——它可能会在允许的地方产生非常具有误导性的代码,例如在 Java 中。

相反,您应该使用类的名称来访问静态成员:

lock (domain.Peer2PeerCom.locker)
{
...
// This should probably be in a while loop...
Monitor.Wait(domain.Peer2PeerCom.locker);
}

(我使用了 lock 而不是显式调用 Monitor.EnterMonitor.Exit - 它更惯用,也更容易获得对 - 在你给出的代码中,进入监视器后代码中的任何异常都会导致监视器“泄漏” - 你不会退出它。)

一般来说,我强烈建议反对像这样对共享锁使用公共(public)静态字段。与类中的私有(private)锁相比,它更难推断出什么在使用锁。 (我一般建议不要使用公共(public)字段,以及类名中的下划线、无特殊原因嵌套的类以及 domain 的类名......)

关于c# - 从一个公共(public)类调用静态参数到另一个公共(public)类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23799584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com