c# 类 ,静态类 , 静态字段, 静态方法

本周的研究内容是   类的各种形态  以及应用场景。 静态类  静态方法 , 以及静态类 的理解和应用场景。

从书上看到的一点讲解 :

1 不管类型本身是否是静态类型,都可以包含静态方法,和静态字段, 有了静态字段最好是有静态构造函数,用来初始化类型里面的静态字段?

2 对于抽象类的理解 :不是具体的感念,而是一类概念的共性 。 应该和结构的概念差不多。  比如圆形  三交行 梯形 都是一种形状,但是形状有是什么那,这个时候就可以定义一个形状的抽象类。 

3 静态类 ,静态方法,静态字段应该是放到栈中,地址是确定的,所以没有创建实例的时候这个方法,字段就是确定的。 而非静态的类,分静态的方法 ,非静态的字段是放到堆中的,只有程序员创建了他们的实例 ,这个地址才是确定的,才可以进行访问。

4 不要滥用静态类和静态方法,打着oo的编程旗号 写出了太多了面向过程的程序。 


为什么类里面要使用静态字段,静态方法。为什么要在一个类里面既有静态字段,方法,又有非静态字段,方法,为什么要放到一起? 这是一个疑惑。?

我倒是知道一个应用场景 就是单例模式 ? 还有其他的应用场景吗 ?

静态方法和静态字段的应用场景总结 :

A 单例模式

B 和类型的实例无关的字段和方法。

C 制作工作类

学习静态方法的代码 如下 

using System;
using System.Data;
using System.Text;

namespace  myStu
{
	/*
	     学习静态字段,静态方法 ,
		 以及单例模式的实现
	*/
	class programe
	{	   
		static void Main(string[] arg)
		{
			try
			{  
				baseClass.getInstanceCount() ;
			    baseClass  obj = new baseClass() ;
				obj.Test() ;
			    baseClass.getInstanceCount() ;
			}
			catch (Exception err)
			{
				Console.WriteLine(err.Message);
			}
		}
	}
    sealed class baseClass
    {
		private static int instanceCount = 0  ;
		public static void getInstanceCount()
		{
			Console.WriteLine("当前类的实例个数是" + instanceCount.ToString()) ;
		}
        public void Test()
        {
			instanceCount = instanceCount +1 ;//实例的个数加1 
			Console.WriteLine("创建实例") ;  
        }

    }
}
c#单例模式的实现代码 

using System;
using System.Data;
using System.Text;

namespace  myStu
{
	/*
	     学习静态字段,静态方法 ,
		 以及单例模式的实现
	*/
	class programe
	{	   
		static void Main(string[] arg)
		{
			try
			{  
				baseClass.getInstanceCount() ;
			    //这么些是错误的,因为构造函数已经是私有的,不能创建实例,只能在单例模式里面创建baseClass  obj3 = new baseClass() ;
				//obj.Test() ;
				baseClass obj = baseClass.CreateInstance() ;
			    baseClass.getInstanceCount() ;

				baseClass obj1 = baseClass.CreateInstance() ;
			    baseClass.getInstanceCount() ;
			}
			catch (Exception err)
			{
				Console.WriteLine(err.Message);
			}
		}
	}
    sealed class baseClass
    {
		static baseClass obj = null ;
		static int instanceCount = 0  ;
		public static void getInstanceCount()
		{
			Console.WriteLine("当前类的实例个数是" + instanceCount.ToString()) ;
		}
		
        baseClass()
        {
			instanceCount = instanceCount +1 ;//实例的个数加1 
			Console.WriteLine("创建实例") ;  
        }
		public static  baseClass CreateInstance()
		{
			if (obj == null )
			{
				obj =  new baseClass() ;	//这里有一个疑问, 这样创建实例的时候不调用构造函数吗?经过验证,这里也是要调用构造函数的?
			}
			return obj  ;
		}

    }
}
单例模式的运行结果
---------- run ----------
=============== 运行C#程序 Write By  森晋科技===============
当前类的实例个数是0
创建实例
当前类的实例个数是1
当前类的实例个数是1
=============== 程序结束 Copy cicnor 2001===============

Output completed (0 sec consumed) - Normal Termination

另外给大家说一个秘密 我的所有的测试代码都是在editpllus里面编写的,编译的,这样的好处很多,

A 脱离了编译器,代码都的自己写,很多关键字啊,什么的都记住了。

B 因为什么都是靠记忆来写代码,对很多知识的理解加深了, 

所有说要是学习 就用editplus来写代码 要是工作就用vs ,智能提示的功能确实是能加快开发效率。

posted @ 2012-01-08 01:21  sdgxboy  阅读(360)  评论(0编辑  收藏  举报