当前位置:  编程技术>.net/c#/asp.net

C# 静态变量与静态方法实例研究

    来源: 互联网  发布时间:2014-10-15

    本文导语:  程序如下: 代码如下: public static string 英汉(string english,翻译结果 一个或多个) { string 英汉辞典 = Settings.Default.辞典所在目录+"haou_dict.xml"; try { if (File.Exists(英汉辞典)) { XDocument dictionary = XDocument.Load(英汉辞典); var query = from p in dict...

程序如下:
代码如下:

public static string 英汉(string english,翻译结果 一个或多个)
{
string 英汉辞典 = Settings.Default.辞典所在目录+"haou_dict.xml";
try
{
if (File.Exists(英汉辞典))
{
XDocument dictionary = XDocument.Load(英汉辞典);
var query = from p in dictionary.Descendants("Name")
where p.Value.ToLower() == english.ToLower()
select p.Parent.Element("Content");
if (query.FirstOrDefault() == null)
{
return null;
}
else//可以翻译
{
if (一个或多个==翻译结果.多个)
{
return query.FirstOrDefault().Value.Trim();
}
else if (一个或多个 == 翻译结果.一个)
{
return 得到第一个汉字词(query.FirstOrDefault().Value);
}
throw new Exception("参数错误!");
}
}
else
{
throw new Exception("词典文件不存在!");
}
}
catch (Exception)
{
throw new Exception("词典文件出错!");
}
}

分析了一下,原因在于每次调用这个方法时都会去载入黄条处这个英汉辞典,如果执行2000次,就会载入2000次,自然速度慢,有没有什么办法在程序运行时只载入一次呢?想起在尚学堂看过的设计模式中有一个单例工厂模式,使用了静态变量,似乎能够解决,实例验证:
先定义一个类:
代码如下:

class 翻译{
public static XDocument 英汉辞典内容 = 英汉辞典初始化();
public XDocument 构造英汉辞典内容;
public 翻译()
{
构造英汉辞典内容 = 英汉辞典初始化();
}
public static XDocument 英汉辞典初始化()
{
if (File.Exists(英汉辞典文件))
{
return XDocument.Load(英汉辞典文件);
}
else
{
throw new Exception("英汉词典文件不存在!");
}
}
}

主程序:
代码如下:

var one = 翻译.英汉辞典内容;
var two = 翻译.英汉辞典内容;
if (one==two)
{
MessageBox.Show("相同");
}
else
{
MessageBox.Show("不同");
}
one = new 翻译().构造英汉辞典内容;
two = new 翻译().构造英汉辞典内容;
if (one == two)
{
MessageBox.Show("相同");
}
else
{
MessageBox.Show("不同");
}

结果:

 

分析如下:
无论是使用静态的翻译.英汉辞典内容,还是new 翻译().构造英汉辞典内容,他们都调用了 英汉辞典初始化() ,但是静态变量中的值只会初始化一次,后面每次访问,都是上次处理过的值,所以第一次显示的结果是相同,也就是说one,two的值其实是一个,第二个two访问的其实是第一次one初始化后的值;而使用类的构造函数来初始化变量每次都会重复初始化,自然其结果不同.
再比如(以下内容为转载):
代码如下:

class Program
{
static void Main(string[] args)
{//输出未经定义的静态变量,结果为0;也说明了,在C#中未赋初值的变量系统自动赋为0
Console.WriteLine(sort.i);
//静态变量的访问方法(类名.静态变量名),而且还可以在外部操作静态变量呢,可见静态变量并不神秘;
sort.i = 5;
//输出5
Console.WriteLine(sort.i);
//还可以通过构造函数对静态变量初值呢,呵
sort sortTest = new sort();
//输出构造函数中的赋值 3;
Console.WriteLine(sort.i);
}
}
class sort
{
public static int i;
public sort()
{
i = 3;
}
}

总结:在类内部访问静态变量时,直接用静态变量名即可,不用以(类名.静态变量名),这样的方式访问,
除了有静态变量之外,还有静态类实例,还有静态方法.但用法都是大同小异;
如:public static void myFun(){} //静态方法
private static Random MyRandom=new Random(); //静态类实例
之所以有时声明为私有静态变量,是为了让它只初始化一次.这样节省了内存空间
但又想让它在外部是不可访问的,这样利用私有这个访问限定符就搞定了.
私有静态:安全又节省空间.
例:如果想在每次实例化类的时间生成一组随机数,但产生随机数是要用到一个类的,即Random,这个类不是静态类,它要产生实例,用产生的实例来生成随机数,但如果在每次类实例化时都产生一个Random实例,那内存空间简直是极大的浪费,所以可以用:
private static Random MyRandom=new Random();
这样每次类实例化时,都会用同一个Random实例MyRandom来产生随机数

    
 
 

您可能感兴趣的文章:

  • C# 静态方法与非静态方法的区别分析
  • C#中实现抽象类里建立静态方法
  • C# 静态构造函数使用总结
  • c#静态方法和非静态方法详细介绍
  • C#生成单页静态页简单实例
  • c#只读字段和常量的区别,以及静态构造函数的使用实例
  • 学习C#中的静态构造函数与复制构造函数
  • C#静态变量与实例变量实例分析
  • 学习C#静态函数及变量的一个精典例子与代码
  • C#中静态的深入理解
  • C#只读字段和常量的区别 静态构造函数的例子
  • C# .NET自定义类实现伪静态页面的代码
  • C# 伪静态 URL重写配置一例
  • C# 静态类与非静态类、静态成员的区别分析
  • C#中静态构造函数的几点说明介绍
  • C# .Net实现Url地址重写(伪静态)的方法
  • 深入理解c# static 静态数据成员和方法
  • 深入C#实例成员和静态成员详解
  • C# 伪静态实现方法与代码示例
  • 深入C#中静态成员和实例变量详解
  • PHP static局部静态变量和全局静态变量总结
  • java有无像vb那样的静态变量?java的staic是类的属性,那末,静态变量如何声明?
  • 请教:(static)静态变量和静态方法是什么意思?
  • 静态函数,静态变量
  • c++静态局部变量和静态函数示例
  • linux动态链接库里全局变量和静态变量会导致动态库不可重入吗?
  • 类静态变量能定义在成员方法中吗?? 在线
  • 大家快来帮帮我,关于JAVA的类变量:一定在定义成STATIC变量(即静态变量)吗?
  • 问一个静态变量和外部函数的问题。
  • 一个类里的静态方法可以访问这个类里的变量吗?
  • 关于C++静态成员函数访问非静态成员变量的问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 一个基本概念问题:静态函数只能调用静态方法,类的成员函数也是静态的吗?
  • linux中静态链接库调用了另一个静态链接库
  • 如何 用一个静态库 生成 另一个静态库
  • 有把两个静态库.a合成一个静态库的简单方法吗
  • linux 生成静态库的时候怎么连接别的静态库
  • 静态博客 静态blog
  • 静态库动态库同时存在时,如何指定使用静态库
  • 如何在一个静态链接库中链接另一个静态链接库?
  • gcc的静态库.lib怎末在编译的时候连接。对了静态库是自己的???
  • 在静态上下文中不能引用非静态方法test(),天啊,为什么我的main()不能调用任何其它函数?
  • 一个静态库包含多个函数,应用程序连接了库中的某个函数,应用程序目标代码中是否还包含了该静态库中的其他函数代码?
  • 急求静态库引用静态库,该如何编译链接!!!
  • asp.net伪静态后真正的静态文件无法访问的解决方法
  • 请问在LINUX下怎么设置静态IP?我在虚拟机中不能设置静态IP怎么办?
  • makefile.am中生成.a静态库的同时,链接其他.a静态库或.la动态库的问题
  • 静态库,动态库,静态链接和动态链接
  • 能否把一些静态库文件(.a)和.o文件一起打包成一个静态库文件?
  • .NET中的静态与非静态的区别分析
  • Linux 动态库,静态库的一些疑惑
  • 有关静态内部类?立即结帐!!!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3