C# 静态ArrayList在内存中存储值?
我是c#的新手,我正在努力学习更多……现在,我很难理解静态ArrayList 在php中,我可以定义:C# 静态ArrayList在内存中存储值?,c#,asp.net,C#,Asp.net,我是c#的新手,我正在努力学习更多……现在,我很难理解静态ArrayList 在php中,我可以定义: Class Singleton{ private static $instance; private static $arrayDemo = array(); private function __construct(){} public static function getInstance(){ if(!isset(self::$inst
Class Singleton{
private static $instance;
private static $arrayDemo = array();
private function __construct(){}
public static function getInstance(){
if(!isset(self::$instance))
self::$instance = new Singleton();
return self::$instance;
}
public static addItem($item){
self::$arrayDemo[] = $item;
}
public static getItems(){
return self::$arrayDemo[];
}
}
Singleton::getInstance();
Singleton::addItem("first");
Singleton::addItem("second");
Singleton::getItems(); // returns {0=>first,1=>second}
如果我重新加载一个页面,我会得到相同的结果(0=>first,1=>second)
我试图在c#中实现单例模式以获得相同的结果,但我得到了重复的值:
public sealed class Singleton
{
private static readonly Singleton instance = new Singleton();
private static ArrayList ArrayDemo = new ArrayList();
private Singleton() { }
public static Singleton Instance
{
get
{
return instance;
}
}
public static void AddItem(string item)
{
ArrayDemo.Add(item);
}
public static ArrayList GetItems()
{
return ArrayDemo;
}
}
//in cshtml:
Singleton.AddItem("first");
Singleton.AddItem("second");
Singleton.GetItems();
若我刷新一次网站,我会得到和php相同的结果。。。但是,如果我将其刷新3次,则返回..:
0=>first,1=>second,2=>first,3=>second,4=>first,5=>second
为什么会发生这种情况?如果我使用静态方法,我可以在刷新时清除ArrayList结果吗?
我只是想了解其中的逻辑
谢谢你们
为什么会发生这种情况
这是一个静态变量。它的生存期与AppDomain的生存期一样长,它是生命的一部分,几乎总是比单个请求的生存期长很多,这似乎是您假设的生存期。在ASP.NET中,相同的AppDomain
服务于许多请求-您不会为每个请求获得单独的进程
我建议:
- 首先,避免使用单例模式;这很少是个好主意
- 您避免使用静态变量,而不是用于有效恒定的数据(甚至可能是…)
- 您避免使用非泛型集合,如
,而更倾向于使用泛型集合,如ArrayList
List
此外,如果您是C#新手,我建议您先放弃web部件——web和富客户端GUI框架都有自己的怪癖需要了解;如果你想尝试使用这种语言和基本的核心库(例如,集合和IO),我发现使用控制台应用程序来实现这一目的会更有效率。这就是问题所在:php不知道真正的静态实例:)请看和@AndreasniederMir当我从C#中学到更多知识时,我觉得我在php世界失去了5年:(我会听从你的建议。.随着我的继续,我觉得我错过了更多需要理解和学习的东西。顺便说一句,如果我试图从单个实例处理变量,不建议使用单例模式?@Carasuman:单例模式会导致难以测试的代码,尤其不适合web应用程序中的可变数据。依赖关系Injection通常有助于为多个对象提供相同的实例。这实际上取决于您尝试执行的操作。您建议用C#从头开始编写一本书?谢谢您的帮助help@Carasuman:C#简而言之是好的,或者如果你更喜欢头首样式,第二版(或更高版本)头先C#没关系。这对我来说有点像GUI,但是嘿。。。