Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我想了解C#中使用全局变量的最佳方法_C#_Variables_Visual Studio 2013_Scope_Global - Fatal编程技术网

我想了解C#中使用全局变量的最佳方法

我想了解C#中使用全局变量的最佳方法,c#,variables,visual-studio-2013,scope,global,C#,Variables,Visual Studio 2013,Scope,Global,我正在做一个大学项目。它是Windows窗体中的聊天应用程序。我想了解使用全局变量的正确方法,即使这违背了oop的理念 我的主类调用另一个类中的一个方法,首先获取聊天消息。然后,我将使用一个全局变量来跟踪最后一条更新消息,然后仅从数据库中检索较新的条目。所以这个变量将保存最新更新的entryid 如果有一种方法比一个全球性的更好,那么我洗耳恭听。否则,您能否建议如何最好地实现这一目标 谢谢 Ps我是一个新手-要善良 我相信您希望使用全局变量,因为您希望具有全局访问权限。我建议您使用线程安全的抽象

我正在做一个大学项目。它是Windows窗体中的聊天应用程序。我想了解使用全局变量的正确方法,即使这违背了oop的理念

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

如果有一种方法比一个全球性的更好,那么我洗耳恭听。否则,您能否建议如何最好地实现这一目标

谢谢
Ps我是一个新手-要善良

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

以下是我的方法。在去读取较新条目的类中,创建一个包含最后一个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();
公共类ReadNewestEntries{
public int entryId{get;set}
公共列表ReadNewEntries(){
//使用entryId读取数据库的一些代码
//读取最后一个ID
entryId=dataList.Max(x=>x.entryId);
}
}
//在主要课堂上:
ReadNewestEntries getNewEntries=newreadnewestentries();
//然后只需保留该类实例即可使用
List=getNewEntries.ReadNewEntries();

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

dupe candiate已关闭,但有一些可用的答案。您已经知道这不是一个好的做法。“更好的方法”的答案有点过于宽泛,但首先要区分类和对象。@Piquet,我认为如果你发布一些你提到的代码,你的问题会更容易回答(也更具体)……没有好的方法。正确地执行此操作不需要任何成本,至少使用静态属性。使用显式setter,您可以调试由全局变量引起的典型问题。并找出至少10个理由将其公开,而不是内部公开。