c# 单例模式
java 和 C#中,用到的全局变量,最好用单例模式来实现管理。我常用XML来保存系统的配置参数,用单例模式来管理。
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
using System.IO;
using System.Xml;
/// <summary>
/// CitySingleton 的摘要说明
/// </summary>
public class CitySingleton
{
List<City> _cities = null;
private static CitySingleton _instance;
private CitySingleton()
{
_cities = new List<City>();
//装载所有站点的数据
LoadData();
}
/// <summary>
/// 获取单例
/// </summary>
public static CitySingleton Instance
{
get
{
if (_instance == null)
{
_instance = new CitySingleton();
}
return _instance;
}
}
/// <summary>
/// 重新装载数据
/// </summary>
public void ReloadData()
{
_cities.Clear();
LoadData();
}
/// <summary>
/// 装载数据
/// </summary>
private void LoadData()
{
//打开风力的配置文件
string filename = HttpContext.Current.Server.MapPath(@"~\parameters\Cities.xml");
FileInfo file = new FileInfo(filename);
if (file.Exists)
{
try
{
XmlDocument xml = new XmlDocument();
xml.Load(filename);
//获取风力的节点
XmlNodeList cities = xml.SelectNodes(@"/Cities/City");
if (cities.Count > 0)
{
foreach (XmlNode city in cities)
{
if (city.HasChildNodes)
{
//将数据保存到WindLevel中
City c = new City();
foreach (XmlNode field in city)
{
switch (field.Name.Trim())
{
case "CityName":
c.CityName = field.InnerText.Trim();
break;
case "Longitude":
c.Longitude = (float)Double.Parse(field.InnerText.Trim());
break;
case "Latitude":
c.Latitude = (float)Double.Parse(field.InnerText.Trim());
break;
case "Zoom":
c.Zoom = (float)Double.Parse(field.InnerText.Trim());
break;
case "TextDirection":
c.TextDirection = field.InnerText.Trim();
break;
default:
break;
}
}
_cities.Add(c);
}
}
}
}
catch
{
}
}
}
/// <summary>
/// 返回符合条件得城市列表
/// 放大
/// </summary>
/// <param name="zoom"></param>
/// <returns></returns>
public List<City> GetCities(float zoom)
{
List<City> cities = new List<City>();
for (int i = 0; i < _cities.Count; i++)
{
City c = _cities[i];
if (c.Zoom >= zoom)
{
cities.Add(c);
}
}
return cities;
}
}
--------------------编程问答-------------------- --------------------编程问答-------------------- 问题是? --------------------编程问答-------------------- 分享帖啊!!顶 --------------------编程问答-------------------- 什么意思呀 --------------------编程问答--------------------
static最好用单例模式?这就好像每天都好像裹着卫生巾,累不累啊。
static就是static,这就足够了。 --------------------编程问答-------------------- 每天回帖有10分! --------------------编程问答-------------------- 什么问题撒,散分? --------------------编程问答-------------------- 先理解什么 是单例模式 --------------------编程问答-------------------- 楼上 正解 --------------------编程问答-------------------- 单例模式,单例模式 --------------------编程问答-------------------- 拿分 走人。
呵呵~~~~
lz有考虑过单实例和静态类区别和使用范围吗? --------------------编程问答-------------------- 不知所云 --------------------编程问答-------------------- --------------------编程问答-------------------- http://www.cnblogs.com/zhenyulu/articles/37246.html
个人觉得这个说的更好 --------------------编程问答-------------------- C#的static class特性提供了对singleton模式的原生支持,为什么不用呢? --------------------编程问答-------------------- --------------------编程问答-------------------- 楼主想要说什么?
--------------------编程问答-------------------- 回复就有分拿吗?下载分还是其他的?求解 --------------------编程问答-------------------- 给楼主提个建议,你的这种实现不是线程安全的,在多线程环境不能保证只创建一个实例 --------------------编程问答--------------------
哪来的断言? --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 我也才学到单例模式。。。 --------------------编程问答-------------------- 木有看明白 --------------------编程问答-------------------- 散分帖么?来,接分喽! --------------------编程问答-------------------- 木有看明白
补充:.NET技术 , C#