【问题标题】:I want to understand the best way in C# to use a global variable [duplicate]我想了解 C# 中使用全局变量的最佳方法 [重复]
【发布时间】:2016-04-22 21:08:42
【问题描述】:

我正在做一个大学项目。它是 Windows 形式的聊天应用程序。我想了解拥有全局变量的正确方法,即使这违反了 oop 哲学!

我的主类调用另一个类中的方法来首先获取聊天消息。然后我会使用一个全局变量来跟踪最后的更新消息,然后从数据库中只检索较新的条目。所以这个变量将保存最新更新的entryid

如果有比全局更好的方法,那么我会全神贯注。否则,您能否建议如何最好地实现这一目标?

谢谢 Ps 我是新手 - 请善待!

【问题讨论】:

  • 那个被骗的候选人已关闭,但有一些可用的答案。
  • 您已经意识到这不是一个好的做法。 “更好的方法”对于答案来说有点过于宽泛,但首先要区分类和对象。
  • @Piquet,如果您发布您提到的一些代码,我认为您的问题会更容易回答(而且更具体)......
  • 没有什么好办法。正确执行此操作不需要任何成本,至少使用静态 属性。使用显式设置器,您可以调试由全局变量引起的典型问题。并找到至少 10 个理由将其 public 而不是 internal

标签: c# variables visual-studio-2013 scope global


【解决方案1】:

我相信你想使用全局变量是因为你想拥有全局访问权限。我建议您使用线程安全的抽象,特别是对于将在用户之间保存消息的东西。考虑singleton。如果您有许多用户同时编写消息,您可以应用该文章中提到的单例来同步会话、消息等。

【讨论】:

    【解决方案2】:

    我会这样做。在你的类中读取较新的条目,创建一个将保存最后一个 entryid 的属性。这可以在您的类实例中为您存储值。因此,当调用读取较新条目的方法(在同一类中)时,它只会查看此 entryid 属性,并将其传递给 SQL 以仅读取比该新条目的方法(然后使用更新 entryid较新的最后一个 entryid)。

    只要您始终使用该类的一个实例,您的最后一个 entryid 就会被存储。这会比全局变量更好,因为它使用了预期的语言。

    类似这样的:

    public class ReadNewestEntries {
      public int entryId {get;set}
      public List<someDataType> ReadNewEntries() {
         // some code to read the database, using the entryId
    
         // Get last ID read
         entryId = dataList.Max(x => x.entryId);
      }
    }
    
    // in main class:
    ReadNewestEntries getNewEntries = new ReadNewestEntries();
    // Then just keep this class instance around to use
    List<someDataType> = getNewEntries.ReadNewEntries();
    

    您的“全局变量”只是类本身中的 entryId int,它将为您保存并保存您上次读取的 ID。我没有测试上面的代码,但希望对你有所帮助,并且不使用全局变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-02
      • 1970-01-01
      • 2017-04-06
      • 2022-01-01
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      相关资源
      最近更新 更多